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


4

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

例如:

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

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


1
悉尼和布里斯班不是同一个TZ吗?UTC +10。
亚历克斯阿特金森2015年

不,悉尼有夏令时,夏天不同1小时
pstanton 2015年

我应该在示例中使用夏季时间戳抱歉!
pstanton 2015年

Answers:


7

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

$ 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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.