使用pytz时,为什么不是萨摩亚+13或+14的偏移量?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用pytz时,为什么不是萨摩亚+13或+14的偏移量?相关的知识,希望对你有一定的参考价值。
我刚读过
BBC:Samoa and Tokelau skip a day for dateline change,30.12.2011
我想用pytz
看到这个,但我尝试的所有东西只显示了偏移-11,但不是+13 or +14:
>>> import pytz
>>> tz = pytz.timezone('Pacific/Samoa')
>>> tz_us = pytz.timezone('US/Samoa')
>>> import datetime
>>> datetime.datetime(2011, 12, 30, 9, 00, tzinfo=datetime.timezone.utc).astimezone(tz).isoformat()
'2011-12-29T22:00:00-11:00'
>>> datetime.datetime(2011, 12, 30, 10,00, tzinfo=datetime.timezone.utc).astimezone(tz).isoformat()
'2011-12-29T23:00:00-11:00'
>>> datetime.datetime(2011, 12, 30, 11, 00, tzinfo=datetime.timezone.utc).astimezone(tz).isoformat()
'2011-12-30T00:00:00-11:00'
>>> datetime.datetime(2011, 12, 31, 15, 00, tzinfo=datetime.timezone.utc).astimezone(tz).isoformat()
'2011-12-31T04:00:00-11:00'
>>> datetime.datetime(2015, 12, 31, 15, 00, tzinfo=datetime.timezone.utc).astimezone(tz).isoformat()
'2015-12-31T04:00:00-11:00'
>>> datetime.datetime(2011, 12, 31, 15, 00, tzinfo=datetime.timezone.utc).astimezone(tz_us).isoformat()
'2011-12-31T04:00:00-11:00'
>>> datetime.datetime(2015, 12, 31, 15, 00, tzinfo=datetime.timezone.utc).astimezone(tz_us).isoformat()
'2015-12-31T04:00:00-11:00'
为什么我看不到偏移+13 / +14?
答案
Pacific/Samoa
和US/Samoa
都是Pacific/Pago_Pago
的别名,代表美属萨摩亚,这是UTC-11并且当天没有跳过。
- 对于美属萨摩亚,请使用
Pacific/Pago_Pago
- 对于萨摩亚独立国,请使用
Pacific/Apia
- 对于托克劳,请使用
Pacific/Fakaofo
就个人而言,我更喜欢只使用规范区域名称。请参阅the list on Wikipedia以供参考。
查看pytz的时区变化
带偏移的UTC时间:
>>> import pytz
>>> tz = pytz.timezone('Pacific/Apia')
>>> import datetime
>>> datetime.datetime(2011, 12, 30, 9, 59, tzinfo=datetime.timezone.utc).astimezone(tz).isoformat()
'2011-12-29T23:59:00-10:00'
>>> datetime.datetime(2011, 12, 30, 10, 00, tzinfo=datetime.timezone.utc).astimezone(tz).isoformat()
'2011-12-31T00:00:00+14:00'
当地时间:
>>> '{:%Y-%m-%d %H:%M}'.format(datetime.datetime(2011, 12, 30, 9, 59, tzinfo=datetime.timezone.utc).astimezone(tz))
'2011-12-29 23:59'
>>> '{:%Y-%m-%d %H:%M}'.format(datetime.datetime(2011, 12, 30, 10, 00, tzinfo=datetime.timezone.utc).astimezone(tz))
'2011-12-31 00:00'
以上是关于使用pytz时,为什么不是萨摩亚+13或+14的偏移量?的主要内容,如果未能解决你的问题,请参考以下文章
为啥萨摩亚的 pytz 和 dateutil 得到不同的结果?
为啥 pytz 在跨越 TZ 和 DST 边界而不是 TZ 名称时正确调整时间和偏移量?
使用 pytz 时区时 Python 日期时间不包括 DST
何时使用 datetime.utcnow() 或 datetime.now(tz=pytz.utc).replace(tzinfo=None)
Python pytz:不存在的时间得到 AmbiguousTimeError,而不是 NonExistentTimeError