问题描述
一家特定的银行在世界所有主要城市都设有分支机构。它们都在当地时间上午10:00开放。如果在使用DST的时区内,那么本地打开时间当然也要遵循DST调整的时间。那么我该如何从当地时间转到UTC时间。
A specific bank has branches in all major cities in the world. They all open at 10:00 AM local time. If within a timezone that uses DST, then of course the local opening time also follows the DST-adjusted time. So how do I go from the local time to the utc time.
我需要的是一个函数 to_utc(localdt,tz)
像这样:
What I need is a function to_utc(localdt, tz)
like this:
参数:
- localdt:本地时间,作为朴素的日期时间对象,经过DST调整
- tz:TZ格式的时区,例如'欧洲/柏林'
返回值:
- datetime对象,在UTC中,可识别时区
编辑:
最大的挑战是检测本地时间是否在夏令时期间,这也意味着已调整夏令时。
The biggest challenge is to detect whether the local time is in a period with DST, which also means that it is DST adjusted.
对于夏季拥有+1 DST的欧洲/柏林:
For 'Europe/Berlin' which has +1 DST in the summer:
- 1月1日10:00 => 1月1日9:00 UTC
- 7月1日10:00 => 7月1日8:00 UTC
对于没有DST的非洲/拉各斯:
For 'Africa/Lagos' which has no DST:
- 1月1日10:00 => 1月1日9:00 UTC
- 7月1日10:00 => 7月1日9:00 UTC
推荐答案
使用,尤其是其:
import pytz
import datetime as dt
def to_utc(localdt,tz):
timezone=pytz.timezone(tz)
utc=pytz.utc
return timezone.localize(localdt).astimezone(utc)
if __name__=='__main__':
for tz in ('Europe/Berlin','Africa/Lagos'):
for date in (dt.datetime(2011,1,1,10,0,0),
dt.datetime(2011,7,1,10,0,0),
):
print('{tz:15} {l} --> {u}'.format(
tz=tz,
l=date.strftime('%b %d %H:%M'),
u=to_utc(date,tz).strftime('%b %d %H:%M %Z')))
收益
Europe/Berlin Jan 01 10:00 --> Jan 01 09:00 UTC
Europe/Berlin Jul 01 10:00 --> Jul 01 08:00 UTC
Africa/Lagos Jan 01 10:00 --> Jan 01 09:00 UTC
Africa/Lagos Jul 01 10:00 --> Jul 01 09:00 UTC
这篇关于Python-从DST调整的本地时间到UTC的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!