Datumsformat für Variable

Datumsformat für Variable

Ich muss eine Variable mit der Funktion „Datum“ schreiben und brauche das Format yyyymmdd (also 20151031). Außerdem würde ich einen Tag entfernen (also 20151031 wird zu 20151030). Ich würde Bash verwenden.

Danke!

Antwort1

Zum date +%Y%m%dDrucken des aktuellen Datums.
Zum date --date '1 day ago' +%Y%m%dDrucken des gestrigen Datums (GNUs date).
Verwenden Sie date -v -1d +Y%m%d(FreeBSD).

Antwort2

bash-4.2 und höher haben integrierte Unterstützung dafür (inspiriert von etwas Ähnlichem in ksh93):

printf -v now '%(%s)T' -1
printf '%(%Y%m%d)T\n' "$((now - 86400))"

Würde das gestrige Datum (also das Datum vor 86400 Sekunden) im Format JJJJMMTT drucken. Funktioniert möglicherweise nicht, wenn es zu bestimmten Nachtzeiten zum Zeitpunkt der Umstellung auf Winter-/Sommerzeit ausgeführt wird (wenn die Tage 23 oder 25 Stunden lang sind).

Für diese Sonderfälle wäre es wahrscheinlich zuverlässiger, wenn es wie folgt geschrieben würde:

printf -v now '%(%s:%H)T' -1
printf '%(%Y%m%d)T\n' "$((${now%:*} - 3600 * (12 + ${now#*:})))"

verwandte Informationen