在bash中轉換時間戳字串的時區

在bash中轉換時間戳字串的時區

我有一個從文件名中提取的日期/時間字串。我知道時間戳記是使用時區 A 編寫的,我需要將其轉換為時區 B 以便進一步處理。這在 bash 中可能嗎?

例如:

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

我假設我必須使用時區 A 解析字串,然後使用時區 B 再次將其輸出到字串。

答案1

要將雪梨的日期解釋為美國洛杉磯的日期:

$ 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

這是布里斯班的結果:

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

怎麼運作的

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

    這會暫時將時區設定為悉尼,並將日期「2015-05-20 18:05:02」轉換為自紀元以來的秒數 (UTC)。

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

    這會將自紀元 (UTC) 以來的時間(以秒為單位)保存到 shell 變數中sec

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

    這會暫時將時區設為洛杉磯並解釋 給出的日期sec

相關內容