Todas las otras preguntas en la red SE tratan con escenarios en los que se supone que la fecha es now
( Q ) o donde solo se especifica una fecha ( Q ).
Lo que quiero hacer es proporcionar una fecha y hora, y luego restar una hora de eso.
Esto es lo que probé primero:
date -d "2018-12-10 00:00:00 - 5 hours - 20 minutes - 5 seconds"
Esto da como resultado 2018-12-10 06:39:55
: agregó 7 horas. Luego restado 20:05 minutos.
Después de leer la página man
y info
de date
, pensé que lo había solucionado con esto:
date -d "2018-12-10T00:00:00 - 5 hours - 20 minutes - 5 seconds"
Pero, el mismo resultado. ¿De dónde obtiene las 7 horas?
Intenté otras fechas también porque pensé que tal vez teníamos 7200 segundos bisiestos ese día, quién sabe jajaja. Pero los mismos resultados.
Algunos ejemplos más:
$ date -d "2018-12-16T00:00:00 - 24 hours" +%Y-%m-%d_%H:%M:%S
2018-12-17_02:00:00
$ date -d "2019-01-19T05:00:00 - 2 hours - 5 minutes" +%Y-%m-%d_%H:%M:%S
2019-01-19_08:55:00
Pero aquí se vuelve interesante. Si omito el tiempo de entrada, funciona bien:
$ date -d "2018-12-16 - 24 hours" +%Y-%m-%d_%H:%M:%S
2018-12-15_00:00:00
$ date -d "2019-01-19 - 2 hours - 5 minutes" +%Y-%m-%d_%H:%M:%S
2019-01-18_21:55:00
$ date --version
date (GNU coreutils) 8.30
¿Qué me estoy perdiendo?
Actualización: agregué un Z
al final, y cambió el comportamiento:
$ date -d "2019-01-19T05:00:00Z - 2 hours" +%Y-%m-%d_%H:%M:%S
2019-01-19_04:00:00
Aunque todavía estoy confundido. No hay mucho sobre esto en la página de información de GNU sobre la fecha.
Supongo que esto es un problema de zona horaria, pero citando The Calendar Wiki en ISO 8601 :
Si no se proporciona información de relación UTC con una representación de hora, se supone que la hora es en hora local.
Que es lo que quiero. Mi hora local también está configurada correctamente. No estoy seguro de por qué la fecha interferiría con la zona horaria en este caso simple de que yo proporcione una fecha y hora y desee restarle algo. ¿No debería restar primero las horas de la cadena de fecha? Incluso si primero lo convierte en una fecha y luego hace la resta, si omito cualquier resta obtengo exactamente lo que quiero:
$ date -d "2019-01-19T05:00:00" +%Y-%m-%d_%H:%M:%S
2019-01-19_05:00:00
Así SI esto realmente es un problema de zona horaria, ¿de dónde viene esa locura viene?