Tanggal Command Memberi Nomor Minggu Salah untuk 31 Desember

21

Ketika saya mencoba untuk mendapatkan nomor minggu untuk tanggal 31 Desember, itu mengembalikan 1. Ketika saya mendapatkan nomor minggu untuk tanggal 30 Desember, saya mendapatkan 52 --- yang adalah apa yang saya harapkan. Hari Senin benar. Ini pada RPI yang menjalankan Ubuntu.

$ date -d "2018-12-30T1:58:55" +"%V%a"

52Sun

$ date -d "2018-12-31T1:58:55" +"%V%a"

01Mon

Masalah yang sama tanpa string waktu

$ date -d "2018-12-31" +"%V%a"

01Mon
George Shafer
sumber
9
"Tanggal Perintah Memberikan Nomor Minggu Salah untuk 31 Desember" - "Salah" sesuai dengan spesifikasi yang mana? Apakah spesifikasi yang Anda gunakan sama dengan yang manual datekatakan?
Jörg W Mittag
2
Anda mungkin tertarik pada Mengapa kontrol MonthCalendar menunjukkan angka minggu yang salah di Rumania? Posting blog adalah tentang Windows, tetapi masalah yang sedang dibahas bersifat umum (dan tampaknya sama dengan apa yang Anda temui).
CVn
1
"Komputer itu pasti salah, karena aku jelas tidak melakukan kesalahan!" mengingatkan saya ketika saya mengeluh bahwa kompiler FORTRAN IV harus memiliki bug, karena program sederhana pertama saya tidak dapat memiliki kesalahan ...
RonJohn

Jawaban:

49

Ini memberi Anda minggu ISO yang dimulai pada hari Senin.

Sistem tanggal minggu ISO secara efektif adalah sistem kalender minggu kabisat yang merupakan bagian dari standar tanggal dan waktu ISO 8601 yang dikeluarkan oleh Organisasi Internasional untuk Standarisasi (ISO) sejak 1988 (terakhir direvisi pada 2004) dan, sebelum itu, didefinisikan dalam ISO (R) 2015 sejak tahun 1971. Ini digunakan (terutama) di pemerintahan dan bisnis untuk tahun fiskal, serta dalam ketepatan waktu. Ini sebelumnya dikenal sebagai "Pengodean tanggal industri". Sistem ini menetapkan satu tahun dalam seminggu di atas kalender Gregorian dengan menetapkan notasi untuk minggu-minggu ordinal tahun itu.


Tahun penomoran minggu ISO (juga disebut tahun ISO secara informal) memiliki 52 atau 53 minggu penuh. Itu adalah 364 atau 371 hari, bukan 365 atau 366 hari yang biasa. Minggu tambahan kadang-kadang disebut sebagai minggu kabisat, meskipun ISO 8601 tidak menggunakan istilah ini.

Minggu-minggu dimulai dengan hari Senin. Setiap tahun minggu adalah tahun Gregorian di mana hari Kamis jatuh. Minggu pertama tahun itu, karenanya, selalu berisi 4 Januari. Oleh karena itu penomoran tahun ISO sedikit menyimpang dari Gregorian selama beberapa hari mendekati 1 Januari.


Jika Anda ingin menampilkan 12/31 sebagai minggu 52, Anda harus menggunakan %U, yang tidak menggunakan standar ISO:

$ date -d "2018-12-31T1:58:55" +"%V%a"
01Mon
$ date -d "2018-12-31T1:58:55" +"%U%a"
52Mon
Jesse_b
sumber
Terima kasih. Itulah yang saya cari. Saya menggunakan metode yang jauh lebih berbelit-belit dengan perintah cal.
George Shafer
3

Definisi jumlah minggu berbeda antara Eropa dan Amerika Serikat, mungkin standar ISO versus ANSI. Ini mungkin terkait dengan minggu yaitu Minggu - Sabtu atau Senin - Minggu, dan ini lagi mungkin terkait dengan definisi Yahudi versus Kristen tentang Hari Tuhan (Sabat vs Minggu).

Untuk Eropa, minggu nomor 1 berisi Kamis pertama di bulan Januari, dan karenanya berisi minimal 4 hari (yaitu mayoritas) milik tahun baru (Kamis-Jumat-Sabtu-Minggu).

Bagaimanapun, di tahun-tahun seperti itu ketika SEMUA (!!) angka minggu berbeda +/- 1 antara Eropa dan Amerika Serikat, ini memberikan kesenangan besar dengan mengatur jadwal di perusahaan multi-nasional. :-)

StessenJ
sumber