Off por erro de 1 ano na data do GNU?

4

Agora, 2014-01-06, data GNU 8.4 no CentOS versão 6.4, faz isso:

$ date --date "last week" +"%Y-%V"
2013-01

Por outro lado,

$ date --date "last week" +"%Y-%U"
2013-52

que é apenas marginalmente melhor.

Este é realmente o comportamento correto?!

    
por sds 06.01.2014 / 16:04

2 respostas

4

Eu não queria pisar nos dedos do pé do @ Jordanm editando sua resposta demais, mas esses As frases da data da semana ISO que ele citou também ajudaram a entender a questão destacada pelo OP.

trecho # 1 - em relação às datas da semana ISO

The system uses the same cycle of 7 weekdays as the Gregorian calendar. Weeks start with Monday. ISO week-numbering years have a year numbering which is approximately the same as the Gregorian years, but not exactly since an ISO week-numbering year (also called ISO year or week 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 referred to here as a leap week, although ISO 8601 does not use this term.

trecho # 2 - também achei isso útil para entender o problema

The first week of a year is the week that contains the first Thursday of the year. It is also (equivalently) the week containing the 4th day of January.

Revisitando o comando de data

Então, se você der uma olhada na página date man, você notará essa opção na seção de formatação.

   %G     year of ISO week number (see %V); normally useful only with %V

Portanto, quando quiser imprimir o ano junto com a semana ISO ( %V ), você realmente deve usar o %G para o ano e não o típico %Y .

Exemplo

Então, quando a data do meu sistema for declarada desta forma:

$ date
Mon Jan  6 15:13:32 EST 2014

Este comando irá relatar a data da semana ISO corretamente, como você está procurando:

$ date --date "last week" +"%G-%V"
2014-01
    
por 06.01.2014 / 21:13
5

Este é um comportamento normal para a semana ISO.

The ISO week-numbering year number deviates from the number of the Gregorian year on, if applicable, a Friday, Saturday, and Sunday, or a Saturday and Sunday, or just a Sunday, at the start of the Gregorian year (which are at the end of the previous ISO year) and a Monday, Tuesday and Wednesday, or a Monday and Tuesday, or just a Monday, at the end of the Gregorian year (which are in week 01 of the next ISO year). In the period 4 January to 28 December and on all Thursdays the ISO week-numbering year number is always equal to the Gregorian year number.

Fonte: link

    
por 06.01.2014 / 16:10