Zeitzone des Timestamp-Strings in Bash umwandeln

4

Ich habe eine Datums- / Uhrzeitzeichenfolge, die aus einem Dateinamen extrahiert wird. Ich weiß, dass der Zeitstempel in Zeitzone A geschrieben wurde und muss ihn für die weitere 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 die Zeichenfolge in Zeitzone A analysieren und sie dann in Zeitzone B erneut in eine Zeichenfolge ausgeben muss.

pstanton
quelle
1
Sind Sydney und Brisbane nicht in derselben TZ? UTC +10.
Alex Atkinson
nein, sydney hat sommerzeit und ist im sommer 1 stunde anders
pstanton
Ich hätte im Beispiel einen Sommer-Zeitstempel verwenden sollen. Entschuldigung!
pstanton

Antworten:

7

So interpretieren Sie das Datum in Sydney in ein 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 festgelegt und das Datum "2015-05-20 18:05:02" in die Zeit in Sekunden seit der Epoche (UTC) umgerechnet.

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

    Dies spart die Zeit in Sekunden seit dem Zeitpunkt (UTC) in der Shell-Variablen sec.

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

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

John1024
quelle