我碰到了这个确切的issue,我无法弄清楚该如何实现该解决方案。
圭多说
解决方案是从之后的时间完全删除tzinfo
转换为UTC。
这是我尝试过的:
date_time = parser.parse(i.pubDate.text)
news.publication_date = date_time.replace(tzinfo=None).date()
而且我得到了同样的错误:
NotImplementedError: DatetimeProperty publication_date_time can only support UTC. Please derive a new Property to support alternative timezones.
所以看来我必须先将日期转换为UTC。在这里,我的研究使我失败了。
我遇到了这个solution:
建议的解决方案是这样的:
def date_time_to_utc(date_time):
tz = pytz.timezone('???')
return tz.normalize(tz.localize(date_time)).astimezone(pytz.utc)
但是我没有时区。我从html来源抓取日期。因此,时区实际上可能来自世界任何地方。没有简单可靠的方法将日期时间转换为UTC吗?
我可以同时使用
dateutil
和pytz
来实现这一点。非常感谢。更新
这真是漫长的一天。我误读了堆栈跟踪。但是,该问题仍然有效。
date_time = (datetime}2015-01-13 18:13:26+00:00
news.publication_date_time = date_time
这导致了崩溃。通过执行此操作,我似乎通过了单元测试:
news.publication_date_time = date_time.replace(tzinfo=None)
这是将GMT 0日期时间转换为UTC日期时间的正确方法吗?或者实际上是UTC的任何时区?
最佳答案
这是将GMT 0日期时间转换为UTC日期时间的正确方法吗?或者实际上是UTC的任何时区?
如果aware
日期时间对象已经存在于UTC(+0000
)中,那么您的公式将起作用:
naive_utc = aware_utc.replace(tzinfo=None)
其中,
aware_utc
是可识别时区的datetime对象,以UTC表示时间。但是,如果
aware
datetime对象不在UTC中;它失败。在一般情况下,您应考虑(可能)非零UTC偏移量:assert aware.tzinfo is not None and aware.utcoffset() is not None
# local time = utc time + utc offset (by definition)
# -> utc = local - offset
naive_utc = aware.replace(tzinfo=None) - aware.utcoffset()
其中,
aware
是任意时区中可识别时区的日期时间对象。但是我没有时区。我从HTML抓取日期
资源。因此,时区实际上可能来自世界任何地方。是
有没有简单可靠的方法可以将日期时间转换为UTC?我可以
同时使用dateutil和pytz来实现此目的。非常感谢。
否。除非日期字符串本身包含时区(或至少包含其utc偏移量),否则
dateutil
,pytz
将无济于事。请记住:地球上的某个地方通常是中午,也就是说,如果您从地球上的不同地方收集日期/时间字符串,那么除非您附加了相应的时区,否则您将无法进行比较。如果您不知道该日期的源时区,则无法将其转换为UTC,也无法获得有效的POSIX时间戳。
关于python - 如何从Python转换为UTC之后完全删除tzinfo?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27973478/