我很好奇如何更改命令显示的时区缩写date
。让时区不变,但是CST
下面如何更改为UTC+8
?
clay@LAPTOP-3PP2093I:~$ date
Thu Dec 1 23:05:28 CST 2022
谢谢你!
PS 1.操作系统是ubuntu 22.04
PP 2. 我的时区是 Asia/Taipei,因此 date +%Z 的结果是 CST。不过我认为这个缩写很混乱,因此希望它显示为 UTC+8。
PS 3.我尝试了一个解决方法,将时间更改为亚洲/新加坡。是的,日期+%Z的结果是+08。但我真的不想改变时区。
答案1
您export TZ='<UTC+8>-8'
可以将当前时区定义为已命名的UTC+8
,并且对于过去、当前和未来的日期,全年都比 UTC 早 8 小时。
然后:
$ date +'%::z %Z'
+08:00:00 UTC+8
$ date
Thu 1 Dec 23:04:48 UTC+8 2022
要保留Asia/Taipei
(及其时区的历史变化)但更改%Z
返回的内容,您需要修改并重新编译从中派生它的 tzdata。
apt source tzdata
sudo apt build-dep tzdata
将台湾部分更改为:
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
Rule Taiwan 1946 only - May 15 0:00 1:00 9
Rule Taiwan 1946 only - Oct 1 0:00 0 8
Rule Taiwan 1947 only - Apr 15 0:00 1:00 9
Rule Taiwan 1947 only - Nov 1 0:00 0 8
Rule Taiwan 1948 1951 - May 1 0:00 1:00 9
Rule Taiwan 1948 1951 - Oct 1 0:00 0 8
Rule Taiwan 1952 only - Mar 1 0:00 1:00 9
Rule Taiwan 1952 1954 - Nov 1 0:00 0 8
Rule Taiwan 1953 1959 - Apr 1 0:00 1:00 9
Rule Taiwan 1955 1961 - Oct 1 0:00 0 8
Rule Taiwan 1960 1961 - Jun 1 0:00 1:00 9
Rule Taiwan 1974 1975 - Apr 1 0:00 1:00 9
Rule Taiwan 1974 1975 - Oct 1 0:00 0 8
Rule Taiwan 1979 only - Jul 1 0:00 1:00 9
Rule Taiwan 1979 only - Oct 1 0:00 0 8
# Zone NAME STDOFF RULES FORMAT [UNTIL]
# Taipei or Taibei or T'ai-pei
Zone Asia/Taipei 8:06:00 - UTC+8:06 1896 Jan 1
8:00 - UTC+8 1937 Oct 1
9:00 - UTC+9 1945 Sep 21 1:00
8:00 Taiwan UTC+%s
然后使用以下命令构建新tzdata
包:
dpkg-buildpackage -b
安装生成的包。
然后:
$ export TZ=Asia/Taipei
$ date
Thu 1 Dec 23:17:41 UTC+8 2022
$ date -d 1979-08-01
Wed 1 Aug 00:00:00 UTC+9 1979
$ date -d 1892-06-01
Wed 1 Jun 00:00:00 UTC+8:6 1892
每次更新 Ubuntu 源代码包时,您都需要重做(这种情况一年会发生好几次,例如,任何国家/地区的任何政府决定新的 DST 更改日期或规则时),因此可能不切实际。
如果您仅对date
的输出有问题,您还可以执行以下操作:
$ date +"$(locale date_fmt | sed 's/%Z/UTC%:z/')"
Fri 2 Dec 00:31:05 UTC+08:00 2022
代替
$ date
Fri 2 Dec 00:31:05 CST 2022
或者:
$ date +"$(locale d_t_fmt | sed 's/%Z/UTC%:z/')"
Fri 02 Dec 2022 00:33:02 UTC+08:00
代替:
$ date +%c
Fri 02 Dec 2022 00:33:02 CST
那些:
$ locale -k LC_TIME | grep fmt
d_t_fmt="%a %d %b %Y %T %Z"
d_fmt="%d/%m/%y"
t_fmt="%T"
t_fmt_ampm="%l:%M:%S %P %Z"
era_d_fmt=""
era_d_t_fmt=""
era_t_fmt=""
date_fmt="%a %e %b %H:%M:%S %Z %Y"
可以通过根据您的偏好编译新的语言环境来更改:
localedef -i <(sed 's/%Z/UTC%z/g' /usr/share/i18n/locales/en_GB) \
-f UTF-8 ~/.locales/en_GB.UTF-8@mytimezoneformat
export LOCPATH=~/.locales LC_TIME=en_GB.UTF-8@mytimezoneformat
(上面安装在我的主目录中,但您也可以在系统范围内执行此操作,而不必进行设置$LOCPATH
)。
然后:
$ date
Fri 2 Dec 01:11:16 UTC+0800 2022
$ date +%c
Fri 02 Dec 2022 01:11:20 UTC+0800