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
仅指明结果显示时间时区的信息,通过当前世界时进行转换。
发表评论