pytz and astimezone() cannot be applied to a naive datetime
我有一个约会,我需要让时区知道。
1 2 3 4 5 6 7 8 | local_tz = timezone('Asia/Tokyo') start_date = '2012-09-27' start_date = datetime.strptime(start_date,"%Y-%m-%d") start_date = start_date.astimezone(local_tz) now_utc = datetime.now(timezone('UTC')) local_now = now_utc.astimezone(local_tz) |
我需要找到这是否属实:
1 | print start_date>local_now |
但是我得到了这个错误。
1 2 | start_date = start_date.astimezone(local_tz) ValueError: astimezone() cannot be applied to a naive datetime |
我将utc转换为tokyo没有任何问题。 我需要在东京做好start_date时区感知广告。
谢谢
对于
1 | start_date = local_tz.localize(start_date) |
对于没有DST转换的时区,将时区附加到天真
1 | start_date = start_date.replace(tzinfo=local_tz) |
有关更多详细信息,请参阅pytz文档的本地化时间和日期算法。
您可以使用
1 2 3 4 5 6 7 8 9 | from datetime import datetime import pytz local_tz = pytz.timezone('Asia/Tokyo') start_date = local_tz.localize(datetime(2012, 9, 27), is_dst=None) now_utc = datetime.utcnow().replace(tzinfo=pytz.utc) print start_date > now_utc |
如果给定的本地时间不明确,
如果您使用的是Django Rest Framework,则可以覆盖DateTimeField类,如:
1 2 3 4 5 6 | class DateTimeFieldOverridden(serializers.DateTimeField): def to_representation(self, value): local_tz = pytz.timezone(TIME_ZONE) value = local_tz.localize(value) return super(DateTimeFieldOverridden, self).to_representation(value) |
你在序列化器中使用它:
1 | date_time = DateTimeFieldOverridden(format='%d-%b-%Y', read_only=True) |
希望这有助于某人。