
He visto varios ejemplos (incluido estecorreo) y parece bastante simple, pero no entiendo lo que estoy haciendo mal (sé que esa publicación es para Linux, pero lo intenté con el date
comando en una máquina Linux y obtuve el mismo resultado allí)
Un ejemplo de comando y salida
me@mymachine~$ gdate -d '2019-10-19 01:37:02 +7 days' +"%Y-%m-%d %H:%M:%S"
2019-10-19 14:37:02
Esperaba que el resultado comenzara con 2019-10-26
. Entonces parece que no está analizando mi entrada, ¿verdad?
Lo que es aún más extraño (para mí de todos modos) es que si quito la parte de tiempo de la entrada, funciona como se esperaba.
me@mymachine~$ gdate -d '2019-10-19 +7 days' +"%Y-%m-%d %H:%M:%S"
2019-10-26 00:00:00
Respuesta1
Análisis
Hice algunas pruebas en Debian 9, estudié man 1 date
y info date
. Este último contiene más información sobre cómo 2019-10-19 01:37:02 +7 days
se interpretan las cadenas similares.
Notas preliminares:
- Mi respuesta usa
date
porque esta es la herramienta en Debian. (Úseloalias date=gdate
para probar mis comandosgdate
sin editarlos cada vez). - Parece que su zona horaria es aproximadamente equivalente a
TZ=UTC+4
.
Intenté replicar tu resultado:
$ date -d '2019-10-19 01:37:02 +7 days' +"%Y-%m-%d %H:%M:%S"
2019-10-19 20:37:02
Mi resultado es diferente, esto indica que las zonas horarias importan. Para replicar realmente su resultado:
$ TZ=UTC+4 date -d '2019-10-19 01:37:02 +7 days' +"%Y-%m-%d %H:%M:%S"
2019-10-19 14:37:02
Explicación
Resulta +7
que su comando de "mal comportamiento" se interpreta como UTC+7
y days
se interpreta como +1 days
. Comparar:
$ TZ=UTC+4 date -d '2019-10-19 01:37:02 UTC+7 +1 days' +"%Y-%m-%d %H:%M:%S"
2019-10-19 14:37:02
(Nota TZ=UTC+4
significaUTC-04:00mientras que UTC+7
en la cadena significaUTC+07:00. Se explica la inconsistencia con los signos.aquí.)
El misterioso resultado ya no lo es tanto.
Capricho
Lo que es realmente extraño es esto:
$ TZ=UTC+4 date -d '2019-10-19 01:37:02 UTC+7 days' +"%Y-%m-%d %H:%M:%S"
2019-10-25 21:37:02
Aparentemente no es UTC+7
y days
(es decir, +1 days
como arriba) sino UTC
(es decir UTC+0
,) y +7 days
:
$ TZ=UTC+4 date -d '2019-10-19 01:37:02 UTC+0 +7 days' +"%Y-%m-%d %H:%M:%S"
2019-10-25 21:37:02
Solución
Mueva la +7 days
subcadena hacia el principio, para que aparezca antes 01:37:02
. Esta forma +7
no se interpretará como UTC+7
:
$ date -d '2019-10-19 +7 days 01:37:02' +"%Y-%m-%d %H:%M:%S"
2019-10-26 01:37:02
Ahora 01:37:02
en la cadena de entrada se interpreta según la zona horaria que date
se considere correcta. El resultado* debería ser el mismo para mí en Europa, para mis compañeros usuarios en Estados Unidos, Australia y en cualquier lugar. Por eso lo dejé TZ=UTC+4
, ya no importa.
*Me refiero acadena de caracteresimpreso por date
debe ser el mismo. Diferentes usuarios interpretarán la misma cadena en diferentes zonas horarias y obtendrán diferentes momentos en la realidad. En este sentido sus resultados son diferentes. En el mismo sentido sus aportaciones son diferentes.