import datetime
import pytz
import pytz.tzinfo
def tzinfo_repr(self):
return 'pytz.timezone({z})'.format(z=self.zone)
pytz.tzinfo.DstTzInfo.__repr__=tzinfo_repr
berlin=pytz.timezone('Europe/Berlin')
now = datetime.datetime.now(berlin)
print(repr(now))
# datetime.datetime(2010, 10, 1, 14, 39, 4, 456039, tzinfo=pytz.timezone("Europe/Berlin"))
请注意
pytz.timezone("Europe/Berlin")
在夏天可能意味着不同于
pytz.timezone("Europe/Berlin"))
在冬天,由于夏令时。所以猴子打了补丁
__repr__
不是的正确表示
self
永远。但在复制和粘贴到IPython的过程中,它应该可以正常工作(极端情况除外)。
另一种方法是子类化
datetime.tzinfo
:
class MyTimezone(datetime.tzinfo):
def __init__(self,zone):
self.timezone=pytz.timezone(zone)
def __repr__(self):
return 'MyTimezone("{z}")'.format(z=self.timezone.zone)
def utcoffset(self, dt):
return self.timezone._utcoffset
def tzname(self, dt):
return self.timezone._tzname
def dst(self, dt):
return self.timezone._dst
berlin=MyTimezone('Europe/Berlin')
now = datetime.datetime.now(berlin)
print(repr(now))
# datetime.datetime(2010, 10, 1, 19, 2, 58, 702758, tzinfo=MyTimezone("Europe/Berlin"))