¿Cómo es esto posible y cómo lo enfrento? Estoy haciendo un script de respaldo que depende de Unix date
y he descubierto un error interesante:
[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
Gandul
fuente
fuente
date
...Respuestas:
Estás viendo este comportamiento debido al horario de verano (horario de verano).
Debido a que actualmente se encuentra en horario de verano, donde su reloj tiene una hora de anticipación, cuando lo solicitó hace tres meses justo después de la medianoche del primero de junio, el tiempo termina siendo una hora "antes" porque no era el horario de verano tres Hace meses.
La documentación de la fecha GNU sugiere evitar esto usando las 12:00 del mediodía y el 15 del mes como puntos de partida, cuando se solicitan días o meses relativos, respectivamente. Por ejemplo:
fuente
[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.Si el tiempo absoluto es su principal preocupación, probablemente sea mejor trabajar fuera de UTC, ya que existe para ese propósito. La respuesta de Michael es muy útil para cuando tienes que trabajar dentro del problema, pero generalmente es una buena idea evitarlo por completo donde puedas.
Cuando su sistema no está configurado en UTC de manera predeterminada, la forma más simple de pasar la zona horaria es anteponiendo su comando con la
TZ
variable de entorno. Esto limita el cambio de zona a un solo comando y evita que la variable se filtre en los comandos posteriores.Lo que no debe hacer es exportar la
TZ
variable, ya que esto puede hacer que las cosas sean muy confusas para solucionar problemas, como lo demuestra lo siguiente.fuente
En este año específico en que su computadora cree que está funcionando, y en la fecha específica que eligió para una prueba de "Hace 1 mes, hace 2 meses y hace 3 meses, sí, es probable que sea una detección del 29 de febrero. No siempre un error, pero ..
Ahora, hoy NO es 2014-06-01. Inténtalo de nuevo. Establezca la fecha de la computadora en 2013-06-01. Inténtalo de nuevo.
Establezca la fecha de la computadora en 2014-09-01. Inténtalo de nuevo.
fuente
MDY
formato americano , utilice los platos/
para separar. Aún mejor, como somos una comunidad internacional aquí, use fechas ISO adecuadas como2014-09-01
.