I retrieve a unix timestamp from a web service in a Python program. This timestamp is in a USA timezone. In order to insert it in a MySQL database with other objects, localized in France, I would like to convert this timestamp to the French timezone.
I could do it with mathematical functions, but there is the issue of daylight savings time. I would prefer to use Python time and date specific functions which should deal with these concepts.
Do you have a hint, I am lost in the Python documentation?
The UNIX timestamp is the number of seconds (or milliseconds) elapsed since an absolute point in time, midnight of Jan 1 1970 in UTC time. (UTC is Greenwich Mean Time without Daylight Savings time adjustments.) Regardless of your time zone, the UNIX timestamp represents a moment that is the same everywhere.
You can find out more about Unix time here, but it's basically a way of expressing a timestamp as an integer, in a way that's independent of time zone. The value itself is the number of seconds (or sometimes, milliseconds) elapsed since midnight UTC, January 1, 1970.
If it's really a unix timestamp, then it's UTC based. Just interpret it correctly for your use case. Apply the timezone translation only when you have to print this date as text.
If you're storing it as timestamp on your side too, keep it exactly as it is.
I had a similar problem in the past when the timestamps of the files we downloaded from a service provider had timestamps corresponding to the PST time zone. The following helped me do to the conversion:
import pytz, datetime, time
import os
originalTimeStamp = os.stat("/tmp/file-from-us-west-coast").st_mtime
# prints e.g. 2010-03-31 13:01:18
print "original:",datetime.datetime.fromtimestamp(originalTimeStamp)
# re-interpret
originalTimeZone = "America/Los_Angeles"
targetTimeZone = "Europe/Paris"
newTimeStamp = pytz.timezone(originalTimeZone).localize(datetime.datetime.fromtimestamp(originalTimeStamp)).astimezone(pytz.timezone(targetTimeZone))
# prints e.g. 2010-03-31 22:01:18+02:00
print "new: ",newTimeStamp
# convert back to seconds since epoch
newTimeStamp = time.mktime(newTimeStamp.timetuple())
# print time difference in hours
print (newTimeStamp - originalTimeStamp) / 3600.0
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With