特定银行在世界所有主要城市都设有分支机构。它们都在当地时间上午10点开放。如果在使用DST的时区内,那么当地的开放时间也遵循DST调整的时间。那么我如何从当地时间到最佳时间。
我需要的是这样的函数to_utc(localdt, tz)
:
参数:
返回:
编辑:
最大的挑战是检测本地时间是否处于DST期间,这也意味着它是DST调整的。
对于夏季+1 DST的'Europe / Berlin':
对于没有夏令时的'非洲/拉各斯':
答案 0 :(得分:8)
使用pytz,特别是localize method:
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
答案 1 :(得分:1)
from datetime import datetime, tzinfo, timedelta
class GMT1(tzinfo):
def utcoffset(self, dt):
return timedelta(hours=1)
def dst(self, dt):
return timedelta(0)
def tzname(self,dt):
return "Europe/Prague"
year, month, day = 2011, 7, 23
dt = datetime(year, month, day, 10)
class UTC(tzinfo):
def utcoffset(self, dt):
return timedelta(0)
def dst(self, dt):
return timedelta(0)
def tzname(self,dt):
return "UTC"
def utc(localt, tz):
return localt.replace(tzinfo=tz).astimezone(UTC())
print utc(dt, GMT1())
新版本。这样做你想要的 - 采用天真的日期时间和时区并返回UTC日期时间。