阿毛
It's me !
想你所想

Linux命令之date

date命令获取指定时区时间

参考Linux date命令获取指定时区的时间

date 指定目标时间进行转换处理

date -d “${date_str}”
-d 选项可用于指定需要转换的目标时间。如果指定的目标时间格式为世界时间格式,如 ‘%Y-%m-%dT%H:%M:%S%_z’ 或 ‘%Y-%m-%d %H:%M:%S%_z’,那么 date 会将给定的目标时间视为世界时,在此基础上进行转换成 TZ 指定时区,没指定则本地时区。如果不是世界时格式,那么它将认为就是 TZ 参数指定时区时间,没有指定则本地时间,不会进行世界时逻辑的转换。验证如下(该验证过程在 Ubuntu 上进行):

~$ TZ=Asia/Shanghai date -d '2021-07-08T06:30:00+00:00'
Thu Jul  8 14:30:00 CST 2021
~$ TZ=Asia/Shanghai date -d '2021-07-08 06:30:00'
Thu Jul  8 06:30:00 CST 2021
~$ TZ=Asia/Shanghai date -d '2021-07-08 06:30:00+00:00'
Thu Jul  8 14:30:00 CST 2021
~$ TZ=UTC-8 date -d '2021-07-08 06:30:00+00:00'
Thu Jul  8 14:30:00 UTC 2021
~$ TZ=UTC-8 date -d '2021-07-08 06:30:00'
Thu Jul  8 06:30:00 UTC 2021
~$ TZ=UTC-8 date -d '2021-07-08T06:30:00'
Thu Jul  8 06:30:00 UTC 2021
~$ TZ=Asia/Tokyo date -d '2021-07-08T06:30:00+00:00'
2021年 07月 08日 星期四 15:30:00 JST
~$ TZ=Asia/Tokyo date -d '2021-07-08T06:30:00'
2021年 07月 08日 星期四 06:30:00 JST
~$ TZ=Asia/Tokyo date -d '2021-07-08 06:30:00'
2021年 07月 08日 星期四 06:30:00 JST
~$ TZ=Asia/Tokyo date -d '2021-07-08 06:30:00+00:00'
2021年 07月 08日 星期四 15:30:00 JST
~$ TZ=UTC date -d '2021-07-08 06:30:00'
2021年 07月 08日 星期四 06:30:00 UTC

如上,-d 后指定目标时间为 “2021-07-08T06:30:00+00:00” 或 “2021-07-08 06:30:00+00:00” 这种世界时格式的话,date 就会认为其为世界时,然后在此基础上进行转换,如 Asia/Shanghai 时区,则 +8 处理。Asia/Tokyo 时区,则 +9 处理。否则,就认为 TZ 指定时区时间,不处理。如果没有指定 TZ,则就以本地时区为主。从上面验证过程,你应该注意到了 “Asia/Shanghai” 和 “UTC-8” 并不等同。实际测试发现,date 并不支持 UTC 加数字偏移量这种形式的参数,会存在问题,解析不了,就会按本地时区处理。具体 TZ 参数支持的值,可见 /usr/share/zoneinfo 目录下。

TZ 的作用

  • 带有 -d 参数
    指明 -d 后非世界时格式的时间,所处的时区,以及指明结果显示时间时区的信息。
  • 不带 -d
    仅指明结果显示时间时区的信息,通过当前世界时进行转换。

humh

文章作者

站长本人,一个憨批!

发表回复

textsms
account_circle
email

想你所想

Linux命令之date
date命令获取指定时区时间 参考Linux date命令获取指定时区的时间 date 指定目标时间进行转换处理 date -d "${date_str}"-d 选项可用于指定需要转换的目标时间。如果指定的目标…
扫描二维码继续阅读
2021-07-08