Datumsbefehl gibt falsche Wochennummer für den 31. Dezember an

21

Wenn ich versuche, die Wochennummer für den 31. Dezember zu erhalten, wird 1 zurückgegeben. Wenn ich die Wochennummer für den 30. Dezember erhalte, erhalte ich 52 - was ich erwarten würde. Der Tag Montag ist richtig. Dies ist auf einem RPI unter Ubuntu.

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

52Sun

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

01Mon

Gleiches Problem ohne Zeitleiste

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

01Mon
George Shafer
quelle
9
"Datumsbefehl gibt falsche Wochennummer für den 31. Dezember" - "Falsch" gemäß welcher Spezifikation? Verwenden Sie dieselbe Spezifikation, für die im Handbuch angegeben ist, datedass sie verwendet wird?
Jörg W Mittag
2
Das könnte Sie auch interessieren Warum zeigt das MonthCalendar-Steuerelement in Rumänien die falschen Wochennummern an? Der Blogbeitrag befasst sich mit Windows, das behandelte Problem ist jedoch allgemeiner Natur (und scheint mit dem, auf das Sie stoßen, identisch zu sein).
einen Lebenslauf vom
1
"Der Computer muss falsch sein, da ich offensichtlich keinen Fehler gemacht habe!" erinnert mich an , wenn ich darüber beschwert , dass der Fortran - IV - Compiler muss einen Fehler hat, weil mein erstes einfaches Programm kann nicht alle Fehler hat ...
RonJohn

Antworten:

49

Dies gibt Ihnen die ISO-Woche, die an einem Montag beginnt.

Das ISO - Wochendatumsystem ist praktisch ein Schaltwochen - Kalendersystem, das Teil des ISO - 8601 - Datums - und Zeitstandards ist, der von der Internationalen Organisation für Normung (ISO) seit 1988 (zuletzt überarbeitet im Jahr 2004) herausgegeben wurde und zuvor in definiert wurde ISO (R) 2015 seit 1971. Es wird (hauptsächlich) in Behörden und Unternehmen für Geschäftsjahre sowie in der Zeitmessung eingesetzt. Dies war zuvor als "Industrielle Datumskodierung" bekannt. Das System gibt ein Wochenjahr über dem Gregorianischen Kalender an, indem es eine Notation für die ordinalen Wochen des Jahres definiert.


Ein ISO-Wochennummerierungsjahr (auch informell ISO-Jahr genannt) hat 52 oder 53 volle Wochen. Das sind 364 oder 371 Tage anstelle der üblichen 365 oder 366 Tage. Die zusätzliche Woche wird manchmal als Schaltwoche bezeichnet, obwohl ISO 8601 diesen Begriff nicht verwendet.

Wochen beginnen mit Montag. Jedes Wochenjahr ist das gregorianische Jahr, in das der Donnerstag fällt. Die erste Woche des Jahres enthält daher immer den 4. Januar. Die Jahreszahl der ISO-Woche weicht daher für einige Tage bis zum 1. Januar geringfügig von der gregorianischen ab.


Wenn Sie 12/31 als Woche 52 anzeigen möchten, sollten Sie verwenden %U, die nicht den ISO-Standard verwendet:

$ date -d "2018-12-31T1:58:55" +"%V%a"
01Mon
$ date -d "2018-12-31T1:58:55" +"%U%a"
52Mon
Jesse_b
quelle
Vielen Dank. Das habe ich gesucht. Mit dem Befehl cal habe ich eine viel komplexere Methode verwendet.
George Shafer
3

Die Definition der Wochennummer unterscheidet sich zwischen Europa und den USA, wahrscheinlich ISO- und ANSI-Standards. Dies kann damit zusammenhängen, dass eine Woche Sonntag - Samstag oder Montag - Sonntag ist, und dies kann wiederum mit der jüdischen oder christlichen Definition des Tages des Herrn (Sabbat gegen Sonntag) zusammenhängen.

In Europa enthält Woche 1 den ersten Donnerstag im Januar und somit mindestens 4 Tage (dh die Mehrheit), die zum neuen Jahr gehören (Do-Fr-Sa-So).

In solchen Jahren, in denen sich ALLE (!!) Wochenzahlen zwischen Europa und den USA um +/- 1 unterscheiden, macht es jedenfalls großen Spaß, Zeitpläne in multinationalen Unternehmen festzulegen. :-)

StessenJ
quelle