date(1) 命令应该从 TZ 环境变量中获取时区。事实上,这是联机帮助页中的一个示例:
68 mak:> date --date='TZ="America/Los_Angeles" 09:00 next Fri'
Fri Oct 20 09:00:00 GMT 2023
采取变化:
69 mak:> TZ='America/Los_Angeles' date
Mon Oct 16 16:03:03 GMT 2023
正如您所看到的,在这两种情况下,日期(1)均使用“GMT”报告。就我而言,我于上午 11:03 在美国/芝加哥运行了这些命令。
我所期望的是通过 TZ 表达的时间:
108 mak:> date --date='TZ="America/Los_Angeles" 09:00 next Fri'
Fri Oct 20 11:00:00 CDT 2023
和
109 mak:> TZ='America/Los_Angeles' date
Mon Oct 16 09:46:44 PDT 2023`
因此,即使设置了 TZ,date(1) 也会回到 GMT,因为在 gitbash 上,zoneinfo 数据的默认目录是空的。
为了解决这个问题,我从 github 上的 zoneinfo 存储库中获取数据,并将 zoneinfo 目录复制到 /use/share/zoneinfo
112 mak@:> ll -d /usr/share/zoneinfo/*
drwxr-xr-x 1 mak 197121 0 Oct 16 11:30 /usr/share/zoneinfo/Africa/
drwxr-xr-x 1 mak 197121 0 Oct 16 11:30 /usr/share/zoneinfo/America/
drwxr-xr-x 1 mak 197121 0 Oct 16 11:30 /usr/share/zoneinfo/Antarctica/
drwxr-xr-x 1 mak 197121 0 Oct 16 11:30 /usr/share/zoneinfo/Arctic/
drwxr-xr-x 1 mak 197121 0 Oct 16 11:30 /usr/share/zoneinfo/Asia/
drwxr-xr-x 1 mak 197121 0 Oct 16 11:30 /usr/share/zoneinfo/Atlantic/
drwxr-xr-x 1 mak 197121 0 Oct 16 11:30 /usr/share/zoneinfo/Australia/
drwxr-xr-x 1 mak 197121 0 Oct 16 11:30 /usr/share/zoneinfo/Brazil/
...
date 立即找到数据并利用它来得到正确的结果。
110 mak:> echo $TZ
America/Chicago
111 mak:> date
Mon Oct 16 12:08:11 CDT 2023