为什么centos系统中的pytz.country_timezones('cn')有不同的结果?

时间:2016-04-19 09:55:33

标签: timezone country pytz

两台电脑安装centos 6.5,内核为3.10.44,有不同的结果。 一个结果是[u'Asia/Shanghai', u'Asia/Urumqi'],另一个是['Asia/Shanghai', 'Asia/Harbin', 'Asia/Chongqing', 'Asia/Urumqi', 'Asia/Kashgar']

是否有任何配置使第一个结果与第二个结果相同?

我有以下python代码:

def get_date():
    date = datetime.utcnow()
    from_zone = pytz.timezone("UTC")
    to_zone = pytz.timezone("Asia/Urumqi")
    date = from_zone.localize(date)
    date = date.astimezone(to_zone)

    return date

def get_curr_time_stamp():
    date = get_date()
    stamp = time.mktime(date.timetuple())

    return stamp
 cur_time = get_curr_time_stamp()
 print "1", time.strftime("%Y %m %d %H:%M:%S", time.localtime(time.time()))
 print "2", time.strftime("%Y %m %d %H:%M:%S", time.localtime(cur_time))

当使用此代码获取时间时,一台计算机的结果(有2个结果)是:

1 2016 04 20 08:53:18
2 2016 04 20 06:53:18

和另一个(有5个结果)是:

1 2016 04 20 08:53:18
2 2016 04 20 08:53:18

我不知道为什么?

1 个答案:

答案 0 :(得分:0)

你可能只是在系统上有一个过时的pytz版本,返回五个时区(或者可能在两个系统上)。您可以找到最新版本here。随着世界各国政府经常改变他们的时区,保持时区更新非常重要。

与大多数系统一样,pytz从tz database获取数据。在2014f版本中,中国的五个时区减少到两个(对应于2014年的pytz)。来自the release notes

  自1970年以后,中国的五个区已经简化为两个区        其他三个人的差异似乎是想象中的。该        亚洲/哈尔滨,亚洲/重庆,亚洲/喀什地区        删除;向后兼容链接仍然有效,尽管如此        1980年5月以前的时间戳的不同行为。亚洲/乌鲁木齐        1980年已经删除了转换为UTC + 8,现在它已经过去了        UTC + 6而不是UTC + 8。 (感谢Luther Ma和Alois Treindl;        Treindl发送了郭庆生两篇论文的有用翻译。)

此外,您可能希望阅读维基百科的Time in China文章,该文章解释了Asia/Urumqui条目是针对“乌鲁木齐时代”的,该文章在新疆某些地区非正式使用。该区域未得到中国政府的承认,被视为政治问题。因此,许多系统选择省略乌鲁木齐时区,尽管它在tz数据库中列出。