Como isso é possível e como faço para lidar com isso? Estou fazendo um script de backup que depende do Unix date
e descobri um bug interessante:
[root@web000c zfs_test]# date +%y-%m-%d --date='2 months ago'
14-04-01
[root@web000c zfs_test]# date +%y-%m-%d --date='3 months ago'
14-02-28
[root@web000c zfs_test]# date
Sun Jun 1 00:08:50 CEST 2014
date
command-line-interface
Shirker
fonte
fonte
date
embora ...Respostas:
Você está vendo esse comportamento por causa do horário de verão (horário de verão).
Como você está no horário de verão, onde seu relógio está uma hora à frente, quando você pergunta há três meses, logo após a meia-noite de 1º de junho, o horário acaba sendo uma hora "mais cedo", porque não eram três horas de verão meses antes.
A documentação da data do GNU sugere contornar isso usando o meio-dia e o dia 15 do mês como ponto de partida, ao solicitar dias ou meses relativos, respectivamente. Por exemplo:
fonte
[root@web000c zfs_test]# date +%y-%m-%d --date='3 months ago'
14-03-01
[root@web000c zfs_test]# date
Sun Jun 1 01:00:15 CEST 2014
date
uso.Se o tempo absoluto for a sua principal preocupação, provavelmente é melhor trabalhar com o UTC como ele existe para esse fim. A resposta de Michael é muito útil para quando você precisa trabalhar dentro do problema, mas geralmente é uma boa idéia evitá-lo totalmente onde puder.
Quando seu sistema não está definido como UTC por padrão, a maneira mais simples de passar o fuso horário é prefixando seu comando com a
TZ
variável de ambiente. Isso limita a opção de zona a um único comando e evita que a variável vaze nos comandos subseqüentes.O que você não deve fazer é exportar a
TZ
variável, pois isso pode tornar as coisas muito confusas para solucionar problemas, conforme demonstrado a seguir.fonte
Nesse ano específico em que seu computador pensa que está sendo operado e na data específica que você escolheu para um teste de "1 mês atrás, 2 meses atrás e 3 meses atrás, sim - é provável que seja uma detecção em 29 de fevereiro. Nem sempre um erro, mas ..
Agora, hoje NÃO é 01/06/2014. Tente novamente. Defina a data do computador para 01/06/2013. Tente novamente.
Defina a data do computador para 01/09/2014. Tente novamente.
fonte
MDY
formato americano , use/
es para separar. Ainda melhor, como somos uma comunidade internacional aqui, use datas ISO adequadas, como2014-09-01
.