$ date -d "Apr 1 2016 - 1 month" +%B
me donne "mars", ce qui est formidable - le mois qui précède avril est mars. Si je fais cela cependant:
$ date -d "$(date -d "Apr 1 2016") - 1 month" +%B
ça me donne "février". Cela provoque un bogue dans un code plus complexe que j'ai. Pourquoi ces 2 commandes affichent-elles des résultats différents?
March
Réponses:
Vous pouvez voir le problème en activant la trace du shell:
Lorsque vous utilisez la sortie de la
date
commande interne , c'est au tout début du mois d'avril, et lorsque vous soustrayez un mois, la discontinuité est due à la modification EST / EDT:Vos résultats, bien sûr, varieront en fonction de vos paramètres de fuseau horaire local. L'activation de la trace affichera le fuseau horaire (dans mon cas,
EDT
).La raison pour laquelle les résultats diffèrent est que dans ce dernier cas, vous avez donné plus d'informations
date
, rendu son paramètre plus spécifique , c'est-à-dire l'heure spécifique de la journée. Dans la première partie, cela n'a pas été spécifié, ce qui donnedate
plus de latitude sur la façon de déterminer la date / heure à afficher.la source
date -d "Apr 1 2016"; date -d "$(date -d "Apr 1 2016")"
:, j'obtiens exactement le même résultat, y compris la même balise de fuseau horaire - pourquoi supprimer un mois des deux donne des résultats différents?