Bash:从另一个时区获取日期和时间

19


我想使用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
4个回答

37

你可以使用

TZ=America/New_York date

或者如果你想进行日期算术运算,你可以使用

date -d "+5 hours"

谢谢@almas shaikh,第一个选项是我情况下最准确的回答。 - Alejandro
5
有时候找到想要的时区的准确名称可能会很棘手。你也可以使用数字偏移量,不过使用方法并不明显。timezone(3)手册页面提供了详细信息。 - tripleee
1
也许可以查看Wikipedia找到例如TZ=Asia/Kolkata的方式来获取IST(这很棘手,因为TZ=UTC-5:30并不完全明显;例如UTC-5.5无法正常工作)。 - tripleee
1
有没有办法在macOS上实现这个?-d参数是用于日期工具中的“夏令时偏移量”,而不是日期字符串的参数。 - Himanshu Tanwar
不支持Mac OS。但是这个TZ=UTC date -R可以使用。 - james-see
对于具有小时和分钟的时区+或- UTC,例如印度:date -d“+5小时30分钟” - Mohammad Yasir K P

13

您可以使用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 带有偏移量的工作方式。我建议使用偏移量,因为它不需要记住长而有效的时区名称。 - anubhava
2
你不需要子shell。TZ=UTC date设置了TZ,运行了date,并将TZ的值恢复为其先前的值(未设置、不同的值或与您指定的值相同,具体情况视情况而定)。 - tripleee
2
此外,TZ=UTC-4 date混淆地将时区打印为“UTC”,尽管它实际上不是。(这在您的示例输出中也可以看到。) - tripleee
最好使用 date -R 来获取 --rfc-2822 格式,这样可以正确显示偏移量。 - anubhava
1
TZ=UTC date -R 是我在 Mac OS 上进行 redis set key 插入并想要 UTC 的唯一可行解决方案:redis-cli set starttime "$(TZ=UTC date -R)" - james-see

8

我使用一个小脚本来实现这个功能,这样我就不必知道或记住我要查找的时区的确切名称。该脚本以搜索字符串作为参数,并针对与搜索匹配的任何时区提供日期和时间。我将其命名为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

3
如果其他解决方案无效,则使用
date --date='TZ="UTC+4" 2016-08-22 10:37:44' "+%Y-%m-%d %H:%M:%S"

2016-08-22 16:37:44


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接