【发布时间】:2014-11-07 13:19:36
【问题描述】:
我想使用 bash 命令从另一个时区 (UTC-4) 获取日期和时间,但我不想将其配置为系统的默认 TZ。
有没有简单的方法来做到这一点?
例如 1(当前):
$ date
fri nov 7 13:15:35 UTC 2014
例如2(我需要的):
$ date (+ some option for UTC-4)
fri nov 7 09:15:35 UTC 2014
【问题讨论】:
我想使用 bash 命令从另一个时区 (UTC-4) 获取日期和时间,但我不想将其配置为系统的默认 TZ。
有没有简单的方法来做到这一点?
例如 1(当前):
$ date
fri nov 7 13:15:35 UTC 2014
例如2(我需要的):
$ date (+ some option for UTC-4)
fri nov 7 09:15:35 UTC 2014
【问题讨论】:
你可以使用
TZ=America/New_York date
或者如果你想做日期算术,你可以使用
date -d "+5 hours"
【讨论】:
TZ=Asia/Kolkata 是获得 IST 的一种方法(这很棘手,因为 TZ=UTC-5:30 并不完全明显;例如 UTC-5.5 不起作用)。
-d 参数用于日期工具中的daylight saving offset,并且没有日期字符串的参数。
TZ=UTC date -R 确实有效。
我为此使用了一个小脚本,因此我不必知道或记住我正在寻找的时区的确切名称。该脚本将搜索字符串作为参数,并给出与搜索匹配的任何时区的日期和时间。我把它命名为wdate。
#!/bin/bash
# Show date and time in other time zones
search=$1
format='%a %F %T %z'
zoneinfo=/usr/share/zoneinfo/posix/
if command -v timedatectl >/dev/null; then
tzlist=$(timedatectl list-timezones)
else
tzlist=$(find -L $zoneinfo -type f -printf "%P\n")
fi
grep -i "$search" <<< "$tzlist" \
| while read z
do
d=$(TZ=$z date +"$format")
printf "%-32s %s\n" "$z" "$d"
done
示例输出:
$ wdate fax
America/Halifax Fri 2022-03-25 09:59:02 -0300
或
$ wdate canad
Canada/Atlantic Fri 2022-03-25 10:00:04 -0300
Canada/Central Fri 2022-03-25 08:00:04 -0500
Canada/Eastern Fri 2022-03-25 09:00:04 -0400
Canada/Mountain Fri 2022-03-25 07:00:04 -0600
Canada/Newfoundland Fri 2022-03-25 10:30:04 -0230
Canada/Pacific Fri 2022-03-25 06:00:04 -0700
Canada/Saskatchewan Fri 2022-03-25 07:00:04 -0600
Canada/Yukon Fri 2022-03-25 06:00:04 -0700
【讨论】:
您可以使用TZ 中的偏移值来获取不同时区的日期:
TZ=UTC date -R
Fri, 07 Nov 2014 13:55:07 +0000
TZ=UTC+4 date -R
Fri, 07 Nov 2014 09:54:52 -0400
【讨论】:
TZ 使用偏移量的方式。我建议使用偏移量,因为它不需要您记住长且有效的时区名称。
TZ=UTC date 设置 TZ,运行 date,并将 TZ 的值恢复为之前的值(未设置,或不同的值,或与您指定的值相同的值,视情况而定)。
TZ=UTC-4 date 会混淆地将时区打印为“UTC”,即使它不是。 (这在您的示例输出中也可见。)
--rfc-2822 格式也最好使用date -R,它也会显示正确的偏移量。
TZ=UTC date -R 是我可以在 Mac OS 上工作的唯一解决方案,用于我正在做的 redis 设置密钥插入并想要 UTC:redis-cli set starttime "$(TZ=UTC date -R)"
如果其他解决方案不起作用,请使用
date --date='TZ="UTC+4" 2016-08-22 10:37:44' "+%Y-%m-%d %H:%M:%S"
2016-08-22 16:37:44
【讨论】: