我有个约会是在本地时间:
date: "2013-12-02 22:00:00"
另有价值TZ:
timezone_offset: "GMT-0800"
如果我: dateutil.parser.parse(date).isoformat()
我会得到:
"2013-12-02T22:00:00+0000"
我想要实现的date
与TZ信息ISO格式,并得到的结果:
"2013-12-02T22:00:00-0800"
一些接近: parse(date,tzinfos=??).isoformat()
我怎样才能从字符串的tzinfo timezone_offset
?
>>> from dateutil.parser import parse
>>> dt = parse("2013-12-02 22:00:00" + "GMT+0800")
>>> dt.isoformat()
'2013-12-02T22:00:00-08:00'
注:符号反转。
你也可以做只使用STDLIB它:
>>> from datetime import datetime
>>> dt = datetime.strptime("2013-12-02 22:00:00", "%Y-%m-%d %H:%M:%S")
>>> dt = dt.replace(tzinfo=FixedOffset(-8*60, "GMT+0800"))
>>> dt.isoformat()
'2013-12-02T22:00:00-08:00'
其中FixedOffset
取自datetime
文档 :
from datetime import tzinfo, timedelta
class FixedOffset(tzinfo):
"""Fixed offset in minutes east from UTC."""
def __init__(self, offset, name):
self.__offset = timedelta(minutes = offset)
self.__name = name
def utcoffset(self, dt):
return self.__offset
def tzname(self, dt):
return self.__name
def dst(self, dt):
return timedelta(0)
这是同样的使用pytz
模块 :
>>> from datetime import datetime
>>> import pytz
>>> dt = datetime.strptime("2013-12-02 22:00:00", "%Y-%m-%d %H:%M:%S")
>>> dt = pytz.timezone('Etc/GMT+8').localize(dt)
>>> dt.isoformat()
'2013-12-02T22:00:00-08:00'
以下是你可以使用两种方法:
>>> import datetime
>>> dtnow = datetime.datetime.now();dtutcnow = datetime.datetime.utcnow()
>>> dtnow
datetime.datetime(2013, 11, 12, 9, 10, 48, 404000)
>>> dtutcnow
datetime.datetime(2013, 11, 12, 15, 10, 48, 404000)
>>> delta = dtnow - dtutcnow
>>> delta
datetime.timedelta(-1, 64800)
>>> hh,mm = divmod((delta.days * 24*60*60 + delta.seconds + 30) // 60, 60)
>>> hh,mm
(-6, 0)
>>> "%s%+02d:%02d" % (dtnow.isoformat(), hh, mm)
'2013-11-12T09:10:48.404000-6:00'
或这个:
>>> import datetime, pytz # 3rd Party
>>> datetime.datetime.now(pytz.timezone('US/Central')).strftime('%Y-%m-%dT%H:%M:%S.%f%z')
'2013-11-12T09:15:20.688000-0600'
>>>
第二种方法的主要优点是它使得你的时间字符串“时区意识”。 从文档 :
有两种类型的日期和时间的对象:“天真”和“知道”。 这种区分是指对象是否具有时区,夏令时,或其他种类的算法或政治时间调整的任何概念。 无论是天真的DateTime对象代表协调世界时(UTC),本地时间,或时间在一些其它时区是纯粹的补充方案,就像它是由一个特定的数字是否代表米,英里,或质量程序。 天真datetime对象很容易理解和合作,在无视现实的某些方面的成本。
希望这可以帮助!