$ date -d "Apr 1 2016 - 1 month" +%B
me da "marzo", lo cual es genial: el mes anterior a abril es marzo. Si hago esto sin embargo:
$ date -d "$(date -d "Apr 1 2016") - 1 month" +%B
me da "febrero". Esto está causando un error en un código más complejo que tengo. ¿Por qué estos 2 comandos muestran resultados diferentes?
March
Respuestas:
Puede ver el problema activando el rastreo de shell:
Cuando usa la salida del
date
comando interno , es a principios de abril, y al restar un mes se encuentra con la discontinuidad debido al cambio EST / EDT:Sus resultados, por supuesto, variarán de acuerdo con la configuración de su zona horaria local. Activar el seguimiento mostrará la zona horaria (en mi caso,
EDT
).La razón por la cual los resultados difieren es que, en este último caso, le ha dado más información y ha
date
hecho que su parámetro sea más específico , es decir, la hora específica del día. En la primera parte, eso no se especificó, dandodate
más margen de maniobra sobre cómo determinar la fecha / hora para mostrar.fuente
date -d "Apr 1 2016"; date -d "$(date -d "Apr 1 2016")"
obtengo exactamente el mismo resultado, incluida la misma etiqueta de zona horaria. ¿Por qué eliminar un mes de ambos da resultados diferentes?