pytz and astimezone() cannot be applied to a naive datetime
This video explains
pytz and astimezone() cannot be applied to a naive datetime
--
Become part of the top 3% of the developers by applying to Toptal
https://topt.al/25cXVn
--
Track title: CC F Haydns String Quartet No 53 in D
--
Chapters
00:00 Question
00:45 Accepted answer (Score 60)
01:24 Answer 2 (Score 17)
01:57 Answer 3 (Score 1)
02:26 Thank you
--
Full question
https://stackoverflow.com/questions/1262...
Accepted answer links:
[.replace()]: http://docs.python.org/library/datetime....
[localized times and date arithmetic]: http://pytz.sourceforge.net/#localized-t...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #datetime #timezone #pytz
#avk47
pytz and astimezone() cannot be applied to a naive datetime
--
Become part of the top 3% of the developers by applying to Toptal
https://topt.al/25cXVn
--
Track title: CC F Haydns String Quartet No 53 in D
--
Chapters
00:00 Question
00:45 Accepted answer (Score 60)
01:24 Answer 2 (Score 17)
01:57 Answer 3 (Score 1)
02:26 Thank you
--
Full question
https://stackoverflow.com/questions/1262...
Accepted answer links:
[.replace()]: http://docs.python.org/library/datetime....
[localized times and date arithmetic]: http://pytz.sourceforge.net/#localized-t...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #datetime #timezone #pytz
#avk47
ACCEPTED ANSWER
Score 60
For pytz timezones, use their .localize() method to turn a naive datetime object into one with a timezone:
start_date = local_tz.localize(start_date)
For timezones without a DST transition, the .replace() method to attach a timezone to a naive datetime object should normally also work:
start_date = start_date.replace(tzinfo=local_tz)
See the localized times and date arithmetic of the pytz documentation for more details.
ANSWER 2
Score 17
You could use local_tz.localize(naive_dt, is_dst=None) to convert a naive datetime object to timezone-aware one.
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
is_dst=None forces .localize() to raise an exception if given local time is ambiguous.
ANSWER 3
Score 1
If you are using Django Rest Framework you could override the DateTimeField class like:
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)
And you use it like this in your serializer:
date_time = DateTimeFieldOverridden(format='%d-%b-%Y', read_only=True)
Hope this helps someone.