Konvertieren Sie die Zeitzone der Zeitstempelzeichenfolge in Bash

Konvertieren Sie die Zeitzone der Zeitstempelzeichenfolge in Bash

Ich habe eine Datums-/Zeitzeichenfolge, die aus einem Dateinamen extrahiert wurde. Ich weiß, dass der Zeitstempel mit Zeitzone A geschrieben wurde, und ich muss ihn zur weiteren Verarbeitung in Zeitzone B konvertieren. Ist das in Bash möglich?

z.B:

filenameTimestamp="2015-01-20 18:05:02"
timezoneA="Australia/Sydney"
timezoneB="Australia/Brisbane"

Ich gehe davon aus, dass ich den String mit Zeitzone A analysieren und ihn dann erneut in einem String mit Zeitzone B ausgeben muss.

Antwort1

So interpretieren Sie das Datum in Sydney als Datum in Los Angeles, USA:

$ sec=$(TZ="Australia/Sydney" date +'%s' -d "2015-05-20 18:05:02")
$ TZ="America/Los_Angeles" date -d "@$sec"
Wed May 20 01:05:02 PDT 2015

Hier ist das Ergebnis für Brisbane:

$ TZ="Australia/Brisbane" date -d "@$sec"
Wed May 20 18:05:02 AEST 2015

Wie es funktioniert

  • TZ="Australia/Sydney" date +'%s' -d "2015-05-20 18:05:02"

    Dadurch wird die Zeitzone vorübergehend auf Sydney eingestellt und das Datum „20.05.2015 18:05:02“ in die Zeit in Sekunden seit Epoche (UTC) umgewandelt.

  • sec=$(TZ="Australia/Sydney" date +'%s' -d "2015-05-20 18:05:02")

    Dadurch wird die Zeit in Sekunden seit Epoche (UTC) in der Shell-Variable gespeichert sec.

  • TZ="America/Los_Angeles" date -d "@$sec"

    Dadurch wird die Zeitzone vorübergehend auf Los Angeles eingestellt und das durch angegebene Datum interpretiert sec.

verwandte Informationen