Vic*_*ria 3 unix linux bash shell
我需要将日期从格式为“yyyy/mm/dd hh:mm:ss TZ”的字符串转换为 UNIX 时间(TZ = 时区)。
\n\n到目前为止我所做的是将没有时区的“yyyy/mm/dd hh:mm:ss”格式的日期转换为时间戳
\n\ndateYMD="2019/2/28 12:23:11.46"\nnewt=$(date -d "${dateYMD}" +"%s")\necho ${newt}\n我得到以下结果。
\n\n1551349391\n我的努力是找到如何将时区和日期/时间转换为时间戳(unix time)。例如,我需要 4 个与 dateYMD 具有相同日期/时间但位于 4 个不同时区的变量,以便它们的时间戳会不同。
\n\n这是我尝试过的最新版本
\n\ndateYMD="2017/09/09 08:58:09"\ntimez=$(TZ=Australia/Sydney date -d @$(date +%s -d "${dateYMD}"))\nunixTimez=$( date --date "${timez}" +"%s" )\necho ${unixTimez}\n这向我显示了以下错误
\n\n   date: invalid date \xe2\x80\x98\xd1\x87\xd1\x82 \xd1\x84\xd0\xb5\xd0\xb2 28 21:23:11 AEDT 2019\xe2\x80\x99\n你不需要打date两次电话。只需调用一次并TZ设置您想要该变量的时区即可。
timesydney=$(TZ=Australia/Sydney date -d "$dateYMD" +%s)
timenyc=$(TZ=US/Eastern date -d "$dateYMD" +%s)
您可以通过设置环境变量来完成此操作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