2015-02-11 99 views
0

根据Busybox FAQ,管理时区的方式取决于我的系统的libc。对于我的嵌入式系统,如果我想更改时区,我需要创建一个/etc/localtime到TZ数据库文件的符号链接,像这样:时区数据库和DST

/etc/localtime -> /usr/share/zoneinfo/Etc/GMT+2

我的问题是关于TZ数据库。

不管怎么说,Asia/JerusalemEtc/GMT+2之间有什么区别,因为它在时区GMT+2?要么; Australia/MelbourneGMT+11有什么区别?

我注意到,例如,墨尔本说,在一年的6个月里面是GMT+11,而在今年剩下的6个月里面是GMT+10

那是一个城市名称在TZ DATABSE符号链接之间的区别,并链接到GMT版本(例如。Etc/GMT+11)?链接到城市名称是否意味着DST调整会自动处理,但对于GMT版本,它不是?

谢谢这么多家伙!

回答

1

注意:由于您在Busybox的上下文中询问,这并不完全是on-topic for Stackoverflow。但是,无论如何,我会继续回答它,因为在这里与编程有关的TZ数据库还有很多其他问题,并且这适用于一般情况。

命名时区,如Asia/Jerusalem反映了某个地理区域的时间。参考点通常是(但并非总是)一个城市,它通常(但并非总是)该地区最多的城市 - 不一定是首府城市。

在这个地理区域内,所有时区变化的历史都被追踪。这包括夏令时更改和基准偏移更改。在其历史记录中的单个时区内可能会有许多更改。您可以在tzdb源代码中查看这些更改的丰富细节。例如,here is the entry for Israel

Etc/GMT-2这样的固定偏移量项目主要在TZDB中用于向后兼容的目的。你会在etcetera file中找到它们。它们不适用于任何特定的地理区域,因此没有夏令时规则。

另请注意,因为它们是为了向后兼容较旧的POSIX标准而创建的,所以这些偏移量的符号是与它们通常会反转的。因此,在标准时间期间,Asia/Jerusalem实际上将与Etc/GMT-2对齐,并且在白天时间将实际对齐Etc/GMT-3

一般而言,您应该只使用指定的时区。你可以找到他们的列表on Wikipedia

+0

谢谢马特!我也刚刚发现了'zdump'工具。我注意到,当我在一个城市使用'zdump'时,我可以在1901年获得参赛作品,但从未比今年(2015年)更近。不应该每个数据库都有2016年,2017年等等的条目,因为那些年份何时到达? – 2015-02-11 10:13:08

+0

您可能会在[Unix&Linux](http:// unix)上询问关于zdump等Linux工具的问题。stackexchange.com/)或[SuperUser](https://superuser.com/)。您可能会在[tz讨论邮件列表](http://www.iana.org/time-zones)中获得更多相关答案。 – 2015-02-11 18:46:48

+0

一般来说,只有在有可靠信息时才会创建规则。没有人能看到未来预测世界各国政府会做什么。 tzdb反映目前已知的信息。在某些情况下,未来的规则已经确定 - 在某些情况下,它只是假定现行规则将会持续到宣布更改为止。 – 2015-02-11 18:49:07