O comando Date fornece o número incorreto da semana para 31 de dezembro

21

Quando tento obter o número da semana de 31 de dezembro, ele retorna 1. Quando recebo o número da semana de 30 de dezembro, recebo 52 --- o que seria de esperar. O dia segunda-feira está correto. Este é um RPI executando 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 seqüência de tempo

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

01Mon
George Shafer
fonte
9
"Comando de data fornece o número errado da semana para 31 de dezembro" - "Errado" de acordo com qual especificação? A especificação que você está usando é a mesma que o manual datediz que está usando?
Jörg W Mittag
2
Talvez você esteja interessado em Por que o controle MonthCalendar mostra os números incorretos da semana na Romênia? A postagem do blog é sobre o Windows, mas o problema em discussão é geral (e parece ser o mesmo que você está encontrando).
um CVn
11
"O computador deve estar errado, porque eu obviamente não cometi um erro!" lembra-me de quando eu reclamei que o compilador FORTRAN IV deve ter um erro, porque o meu primeiro programa simples não poderia ter quaisquer erros ...
RonJohn

Respostas:

49

Isso fornece a semana ISO, que começa na segunda-feira.

O sistema ISO de data da semana é efetivamente um sistema de calendário da semana bissexto que faz parte do padrão de data e hora da ISO 8601 emitido pela Organização Internacional de Normalização (ISO) desde 1988 (última revisão em 2004) e, antes disso, foi definido em ISO (R) 2015 desde 1971. É usado (principalmente) em governos e empresas nos exercícios, bem como em pontualidade. Isso era conhecido anteriormente como "codificação de data industrial". O sistema especifica um ano da semana no topo do calendário gregoriano, definindo uma notação para as semanas ordinais do ano.


Um ano de numeração de semanas ISO (também chamado de ano ISO informalmente) tem 52 ou 53 semanas completas. São 364 ou 371 dias, em vez dos 365 ou 366 dias habituais. A semana extra às vezes é chamada de semana bissexta, embora a ISO 8601 não use esse termo.

As semanas começam na segunda-feira. O ano de cada semana é o ano gregoriano em que a quinta-feira cai. A primeira semana do ano, portanto, sempre contém 4 de janeiro. Portanto, a numeração anual do ano ISO se desvia ligeiramente do gregoriano por alguns dias perto de 1 de janeiro.


Se você deseja mostrar 31/12 como 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
Jesse_b
fonte
Obrigado. Era isso que eu estava procurando. Eu usei um método muito mais complicado com o comando cal.
George Shafer
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 ao fato de uma semana ser domingo - sábado ou segunda-feira - domingo, e isso novamente pode estar relacionado à definição judaica versus cristã do Dia do Senhor (sábado x 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, a maioria) pertencentes ao ano novo (Qui-Sex-Sáb-Dom).

De qualquer forma, nesses anos em que TODOS os números da semana (+) são +/- 1 diferentes entre a Europa e os EUA, isso proporciona muita diversão com a definição de horários em empresas multinacionais. :-)

StessenJ
fonte