Date Command fornece um número de semana errado para 31 de dezembro

19

Quando tento obter o número da semana para 31 de dezembro, ele retorna 1. Quando obtenho o número da semana para 30 de dezembro, recebo 52 - que é o que eu esperaria. O dia de segunda-feira está correto. Isso está em um RPI rodando o Ubuntu.

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

52Sun

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

01Mon

Mesmo problema sem sequência de tempo

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

01Mon
    
por George Shafer 15.11.2018 / 21:22

2 respostas

49

Isso está lhe dando a semana ISO, que começa na segunda-feira.

The ISO week date system is effectively a leap week calendar system that is part of the ISO 8601 date and time standard issued by the International Organization for Standardization (ISO) since 1988 (last revised in 2004) and, before that, it was defined in ISO (R) 2015 since 1971. It is used (mainly) in government and business for fiscal years, as well as in timekeeping. This was previously known as "Industrial date coding". The system specifies a week year atop the Gregorian calendar by defining a notation for ordinal weeks of the year.


An ISO week-numbering year (also called ISO year informally) has 52 or 53 full weeks. That is 364 or 371 days instead of the usual 365 or 366 days. The extra week is sometimes referred to as a leap week, although ISO 8601 does not use this term.

Weeks start with Monday. Each week's year is the Gregorian year in which the Thursday falls. The first week of the year, hence, always contains 4 January. ISO week year numbering therefore slightly deviates from the Gregorian for some days close to 1 January.

Se você deseja mostrar 12/31 como a semana 52, use %U , que não usa o padrão ISO:

$ date -d "2018-12-31T1:58:55" +"%V%a"
01Mon
$ date -d "2018-12-31T1:58:55" +"%U%a"
52Mon
    
por 15.11.2018 / 21:29
3

A definição do número da semana é diferente entre a Europa e os EUA, provavelmente os padrões ISO versus ANSI. Isso pode estar relacionado a uma semana sendo domingo - sábado ou segunda - domingo, e isso novamente pode estar relacionado à definição judaica versus cristã do Dia do Senhor (sábado vs domingo).

Para a Europa, a semana número 1 contém a primeira quinta-feira de janeiro e, portanto, contém um mínimo de 4 dias (ou seja, uma maioria) pertencentes ao ano novo (de quinta a sexta-feira a domingo).

De qualquer forma, em tais anos, quando TODOS (!!) números de semana são +/- 1 diferentes entre a Europa e os EUA, isso dá uma grande diversão com a definição de horários em empresas multinacionais. :-)

    
por 16.11.2018 / 13:17