在bash中转换时间戳字符串的时区

pst*_*ton 5 linux bash

我有一个从文件名中提取的日期/时间字符串。我知道时间戳是使用时区 A 编写的,我需要将其转换为时区 B 以进行进一步处理。这在 bash 中可能吗?

例如:

filenameTimestamp="2015-01-20 18:05:02"
timezoneA="Australia/Sydney"
timezoneB="Australia/Brisbane"
Run Code Online (Sandbox Code Playgroud)

我假设我必须使用时区 A 解析字符串,然后使用时区 B 将其再次输出到字符串。

Joh*_*024 8

要将悉尼的日期解释为美国洛杉矶的日期:

$ 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
Run Code Online (Sandbox Code Playgroud)

这是布里斯班的结果:

$ TZ="Australia/Brisbane" date -d "@$sec"
Wed May 20 18:05:02 AEST 2015
Run Code Online (Sandbox Code Playgroud)

这个怎么运作

  • 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