$ date -d "Apr 1 2016 - 1 month" +%B
gibt mir "März", was großartig ist - der Monat vor April ist März. Wenn ich das aber mache:
$ date -d "$(date -d "Apr 1 2016") - 1 month" +%B
es gibt mir "Februar". Dies verursacht einen Fehler in einem komplexeren Code, den ich habe. Warum zeigen diese beiden Befehle unterschiedliche Ergebnisse?
March
Antworten:
Sie können das Problem erkennen, indem Sie die Shell-Ablaufverfolgung aktivieren:
Wenn Sie die Ausgabe des inneren
date
Befehls verwenden, ist dies Anfang April, und wenn Sie einen Monat subtrahieren, tritt aufgrund von EST / EDT-Änderungen eine Diskontinuität auf:Ihre Ergebnisse hängen natürlich von Ihren lokalen Zeitzoneneinstellungen ab. Wenn Sie den Trace aktivieren, wird die Zeitzone angezeigt (in meinem Fall
EDT
).Der Grund, warum sich die Ergebnisse unterscheiden, besteht darin, dass Sie im letzteren Fall mehr Informationen gegeben haben
date
, um den Parameter spezifischer zu machen , dh die spezifische Tageszeit. Im ersten Teil wurde dies nicht angegeben, wodurchdate
mehr Spielraum für die Bestimmung des Datums / der Uhrzeit für die Anzeige gegeben wurde.quelle
date -d "Apr 1 2016"; date -d "$(date -d "Apr 1 2016")"
, erhalte ich genau das gleiche Ergebnis, einschließlich des gleichen Zeitzonen-Tags. Warum führt das Entfernen eines Monats von beiden zu unterschiedlichen Ergebnissen?