Search code examples
pythonpython-2.7datetimetimezoneunix-timestamp

Timestamp to non UTC Datetime object is substracting hours twice


I have the following timestamp 1550588656 which translates to 2019-02-19 15:04:16+00:00 in UTC time convention.

I want to convert it to my country's time convention (UTC or GMT -3 in this time of the year) so it should translate to 2019-02-19 12:04:16+00:00

I have read on other SO questions that first I have to convert the timestamp to an UTC aware Datetime object and then localize it, I'm doing it like this

# string format time
naive_datetime = datetime.fromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M:%S')

# string parse time
naive_datetime = datetime.strptime(naive_datetime, "%Y-%m-%d %H:%M:%S")

# make naive Datetime object UTC aware
utc_datetime = naive_datetime.replace(tzinfo=pytz.UTC)

So now it's not a naive Datetime object, from here I should be able to localize it to my country's timezone. In Python that is pytz.timezone('America/Santiago')

So it should go something like this

cltime = pytz.timezone('America/Santiago')
local_datetime = utc_datetime.astimezone(cltime)

But I'm getting 2019-02-19 09:04:16-03:00 (UTC or GTM -6 ) as a result and I don't know why.

Can someone explain? My intuition tells me it's probably a simple thing I'm not looking at, but I've spent some minutes in it and I haven't been able to tell yet.


Solution

  • If you look at the documentation for fromtimestamp:

    Return the local date and time corresponding to the POSIX timestamp

    So the problem is that it is already doing a conversion from UTC to the local time, and you're doing it a second time.