在UNIX时间戳Shell / Bash中使用时区转换日期

问题描述 投票:2回答:2

我需要将字符串中的日期格式为“yyyy / mm / dd hh:mm:ss TZ”转换为UNIX时间(TZ = Timezone)。

到目前为止,我所做的是将没有时区的格式“yyyy / mm / dd hh:mm:ss”的日期转换为使用时区的时间戳

dateYMD="2019/2/28 12:23:11.46"
newt=$(date -d "${dateYMD}" +"%s")
echo ${newt}

我有以下结果。

1551349391

我的目标是找到时区和日期/时间如何转换为时间戳(unix时间)。例如,我需要4个变量,其日期/时间与dateYMD相同,但在4个不同的时区中,以便它们的时间戳不同。

这是我尝试过的最新消息

dateYMD="2017/09/09 08:58:09"
timez=$(TZ=Australia/Sydney date -d @$(date +%s -d "${dateYMD}"))
unixTimez=$( date --date "${timez}" +"%s" )
echo ${unixTimez}

这向我显示了以下错误

   date: invalid date ‘чт фев 28 21:23:11 AEDT 2019’
linux bash shell unix
2个回答
4
投票

你不需要两次调用date。只需将TZ设置为您想要该变量的时区即可调用一次。

timesydney=$(TZ=Australia/Sydney date -d "$dateYMD" +%s)
timenyc=$(TZ=US/Eastern date -d "$dateYMD" +%s)

1
投票

您可以通过设置TZ=环境变量(请参阅Barmar的答案)来执行此操作,也可以将时区包含在时间字符串中。这比TZ =具有更高的优先级。

例子:

TZ=UTC date -d '2019-01-01 12:00 CET' +'%s, %F %T %Z %z'
TZ=CET date -d '2019-01-01 12:00 CET' +'%s, %F %T %Z %z'
TZ=UTC date -d '2019-01-01 12:00 PDT' +'%s, %F %T %Z %z'
TZ=CET date -d '2019-01-01 12:00 PDT' +'%s, %F %T %Z %z'
TZ=UTC date -d '2019-01-01 12:00 +500' +'%s, %F %T %Z %z'

将打印

1546340400, 2019-01-01 11:00:00 UTC +0000
1546340400, 2019-01-01 12:00:00 CET +0100
1546369200, 2019-01-01 19:00:00 UTC +0000
1546369200, 2019-01-01 20:00:00 CET +0100
1546326000, 2019-01-01 07:00:00 UTC +0000
© www.soinside.com 2019 - 2024. All rights reserved.