在 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

相关内容