首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是我的区域信息向后还是我搞不懂

是我的区域信息向后还是我搞不懂
EN

Unix & Linux用户
提问于 2022-04-27 16:18:17
回答 1查看 377关注 0票数 3

据我所知,美国东部时间为东部标准时间GMT-5,东部夏令时间为GMT-4 .

那么,为什么这两条命令在回答中给出了不同的时间?

代码语言:javascript
复制
laptop % TZ=EST5EDT date
Wed Apr 27 12:16:36 EDT 2022
laptop % TZ=GMT-4 date
Wed Apr 27 20:16:40 GMT 2022

他们不应该是一样的吗?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2022-04-27 17:55:01

实际上,使用TZ变量的方法主要有两种。旧的在POSIX标准中指定,它可以在实际变量中编码时区和当前的夏令时间规则。例如,欧洲UTC+2小时时区可能完全指定如下POSIX样式:

代码语言:javascript
复制
TZ=EET-2EEST,M3.5.0/3,M10.5.0/4
  • EET =“标准时间”时区ID (“东欧时间”)
  • -2 =偏移,您必须添加到本地时间才能得到UTC
  • EEST = DST时区ID (“东欧夏季时间”)
  • M3.5.0/3 = DST当地时间3月上周日03:00
  • M10.5.0/4 =恢复当地时间10月上周日04:00

请注意,此格式假定当前年份的DST规则也适用于任何过去和未来年份.这种假设不太可能是正确的。

由于这显然是不可取的,许多unix风格的开放源码软件使用TZ环境变量作为对更扩展的时区信息表的引用,包括特定时区的当前和历史定义。

这些基于表的实现中最全面的是Olson时区信息数据库,它现在是由IANA维护。Olson样式的TZ值通常采用/格式,但数据库也有其他选项。您可以在TZ变量中使用任何一种形式,但是如果值不明确,则优先使用POSIX格式,因为它是既定的标准。

TZ变量的POSIX标准定义是您自然假设的“向后”定义。第一个时区标签后的数字标识必须添加到本地时间的小时数,以获得UTC时间。

这可能是因为在POSIX标准开发之前,TZ环境变量约定的不同版本已经存在.由于Unix最初是在西半球发展起来的,所以现有的惯例倾向于对美国时区使用正数。(在Unix的早期,没有人会猜到,MULTICS OS开发项目的主要学术分支会成长为更大、更长寿的项目。)

我已经了解到,POSIX规范的开发人员尽力寻找已经最常见的行为,并将其编码为标准,除非有非常明显的理由不这样做。

所以,TZ=GMT-4被解释为POSIX风格.这并不意味着“一个时区,即格林尼治时间减去4小时”:它实际上意味着“一个时区,比世界协调时提前4小时,并命名为格林尼治标准时间”。我猜,您可以将您的自定义时区命名为您想要的任何东西,但是对于完全不同的东西重用一个众所周知的历史时区标识符会造成混乱。

如果您想通过Linux中的"GMT“指定一个时区,那么应该通过添加Etc/前缀来使用较新的Olson样式的TZ设置.即使如此,标志惯例也与你所期望的相反,很可能是为了保持与旧POSIX风格设置的类比。

比较:

代码语言:javascript
复制
$ TZ=Etc/GMT-4 date
Wed 27 Apr 21:09:32 +04 2022     # Olson: 4 hours east of UTC, timezone correctly identified numerically 
$ TZ=GMT-4 date
Wed 27 Apr 21:09:50 GMT 2022     # POSIX: 4 hours east of UTC, misleading timezone identifier!
$ TZ=Etc/GMT+4 date
Wed 27 Apr 13:09:39 -04 2022     # Olson: 4 hours west of UTC, timezone correctly identified numerically
$ TZ=GMT+4 date  
Wed 27 Apr 13:10:14 GMT 2022     # POSIX: 4 hours west of UTC, misleading timezone identifier!
$ date -u
Wed 27 Apr 17:10:25 UTC 2022     # UTC time for reference.
票数 10
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/700623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档