dateutil.rrule模块有一个rrule
类,它有一个自定义__str__
方法将其实例转换为字符串,而一个rrulestr
函数则执行相反的操作,即将字符串转换回对象。
然而,似乎_dtstart
rrule
属性在转换为字符串并返回时会丢失其时区信息。例如,在以下脚本中:
from dateutil.rrule import rrule, rrulestr, DAILY
from dateutil.parser import parse
start = parse("8 Feb 2017 14:00 UTC")
my_rrule = rrule(DAILY, dtstart=start)
my_rrule2 = rrulestr(str(my_rrule))
assert my_rrule._dtstart == my_rrule2._dtstart
断言导致
TypeError: can't compare offset-naive and offset-aware datetimes
具体来说,我注意到my_rrule.dtstart
具有表示
datetime.datetime(2017, 2, 8, 14, 0, tzinfo=tzutc())
而my_rrule2._dtstart
是
datetime.datetime(2017, 2, 8, 14, 0)
为什么时区信息丢失了?这不是__str__
/ rrulestr
组合中的缺陷吗?