我遇到了这个issue,我无法弄清楚如何在我的案例中找到解决方案。
Guido说
解决方案是从之后的时间完全删除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的任何时区?
答案 0 :(得分:1)
这是将GMT 0日期时间转换为UTC日期时间的正确方法吗?或者实际上是UTC的任何时区?
如果aware
日期时间对象已经是UTC(+0000
),那么您的公式有效:
naive_utc = aware_utc.replace(tzinfo=None)
其中aware_utc
是一个时区感知日期时间对象,表示UTC时间。
但是如果aware
日期时间对象不是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时间戳。
答案 1 :(得分:0)
我是个白痴,现在已经很晚了,这次我读了这个问题。
tstmp= date_time.replace(tzinfo=utc).total_seconds()
naive_date = datetime.utcfromtimestamp(tstmp)
第一个答案只会给你当前的天真时间
答案 2 :(得分:0)
试试这个:
dateTime = dateTime.replace(tzinfo=None)
dtUtcAware = pytz.UTC.localize(dateTime)