Il comando Date fornisce il numero della settimana errato per il 31 dic


21

Quando provo a ottenere il numero della settimana per il 31 dic, restituisce 1. Quando ottengo il numero della settimana per il 30 dic, ottengo 52 --- che è quello che mi aspetterei. Il giorno lunedì è corretto. Questo è su un RPI che esegue Ubuntu.

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

52Sun

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

01Mon

Stesso problema senza stringa temporale

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

01Mon

9
"Il comando data indica il numero della settimana errato per il 31 dic" - "Sbagliato" in base a quale specifica? La specifica che stai usando è la stessa utilizzata per il manuale date?
Jörg W Mittag,


2
Potresti essere interessato a Perché il controllo MonthCalendar mostra i numeri delle settimane sbagliati in Romania? Il post sul blog riguarda Windows, ma il problema in discussione è generale (e sembra essere lo stesso di quello che stai riscontrando).
un CVn

1
"Il computer deve essere sbagliato, perché ovviamente non ho fatto errori!" mi ricorda quando mi sono lamentato che il compilatore FORTRAN IV deve avere un bug, perché il mio primo semplice programma non poteva avere errori ...
RonJohn

Risposte:


49

Questo ti dà la settimana ISO che inizia di lunedì.

Il sistema di data della settimana ISO è effettivamente un sistema di calendario della settimana bisestile che fa parte dello standard di data e ora ISO 8601 emesso dall'International Organization for Standardization (ISO) dal 1988 (ultima revisione nel 2004) e, prima di ciò, era stato definito in ISO (R) 2015 dal 1971. Viene utilizzato (principalmente) nel governo e negli affari per gli anni fiscali, nonché per il cronometraggio. Questo era precedentemente noto come "Codifica data industriale". Il sistema specifica una settimana all'anno in cima al calendario gregoriano definendo una notazione per le settimane ordinali dell'anno.


Un anno di numerazione delle settimane ISO (chiamato anche anno ISO in modo informale) ha 52 o 53 settimane intere. Sono 364 o 371 giorni invece dei soliti 365 o 366 giorni. La settimana in più viene talvolta definita settimana bisestile, sebbene ISO 8601 non utilizzi questo termine.

Le settimane iniziano con lunedì. Ogni anno della settimana è l'anno gregoriano in cui cade il giovedì. La prima settimana dell'anno, quindi, contiene sempre il 4 gennaio. La numerazione dell'anno ISO della settimana pertanto si discosta leggermente dal gregoriano per alcuni giorni vicini al 1 ° gennaio.


Se vuoi mostrare 12/31 come settimana 52, dovresti usare %U, che non usa lo standard ISO:

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

Grazie. Questo è quello che stavo cercando. Ho usato un metodo molto più contorto con il comando cal.
George Shafer,

3

La definizione del numero della settimana è diversa tra Europa e Stati Uniti, probabilmente ISO rispetto agli standard ANSI. Ciò può essere correlato a una settimana che è domenica - sabato o lunedì - domenica, e di nuovo può essere correlato alla definizione ebraica contro cristiana del giorno del Signore (sabato contro domenica).

Per l'Europa, la settimana numero 1 contiene il primo giovedì di gennaio e quindi contiene un minimo di 4 giorni (vale a dire la maggioranza) appartenenti al nuovo anno (Gio-Ven-Sab-Dom).

Ad ogni modo, in quegli anni in cui TUTTI (!!) i numeri delle settimane sono +/- 1 diversi tra Europa e Stati Uniti, questo si diverte molto con l'impostazione degli orari nelle compagnie multinazionali. :-)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.