python timezone与标准不同

时间:2017-12-11 11:23:43

标签: python timezone timezone-offset

我在使用时区时有不寻常的经验。我必须将python datetime对象格式化为iso8601格式。在linux date --iso-8601=s中会给你结果:2017-12-11T12:30:07+03:30。在python中,我尝试使用isoformat方法而不设置任何时区:

>>> datetime.datetime(year=2017, month=1, day=1, hour=12, minute=44, second=25, microsecond=0).isoformat()

但它返回'2017-01-01T12:44:25',它不包含与UTC的时差;我想因为它是一个天真的日期时间对象。我尝试使用显式时区:

>>> datetime.datetime(year=2017, month=1, day=1, hour=12, minute=44, second=25, microsecond=0, tzinfo=pytz.timezone('Asia/Tehran')).isoformat()

但令人惊讶的是我得到'2017-01-01T12:44:25+03:26'落后4分钟。

我使用命令date +'%:z %Z'检查了我的计算机时区,输出为+03:30 +0330。有关命令IranAsia/Tehran的时区名称分别为find /usr/share/zoneinfo/* -type f -exec sh -c "diff -q /etc/localtime '{}' > /dev/null && echo {}" \cat /etc/timezone

另一方面,我检查了pytz.timezoneIran时区名称的方法Asia/Tehran的结果;我在两种情况下都得到LMT+3:26:00 STD。我可以使用tzoffset和12600作为时差秒,但夏令时会影响到这一点;我想独立于。

我也试图找到偏移秒:

>>> d = datetime.datetime(year=2017, month=1, day=1, hour=12, minute=44, second=25, microsecond=0, tzinfo=pytz.timezone('Asia/Tehran'))
>>> tzlocal.get_localzone().utcoffset(d)
datetime.timedelta(0, 12360)

没有时区:

>>> d = datetime.datetime(year=2017, month=1, day=1, hour=12, minute=44, second=25, microsecond=0)
>>> tzlocal.get_localzone().utcoffset(d)
datetime.timedelta(0, 12600)

但正如我所提到的,如果我没有设定时区,我就无法与isoformat获得时差。

我有两个问题:

  1. 为什么它与标准的python时区不同?
  2. 如何使用所有条件处理此ISO格式?

0 个答案:

没有答案