开发者

Changing a unix timestamp to a different timezone

开发者 https://www.devze.com 2023-03-21 00:24 出处:网络
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

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 s开发者_运维百科hould deal with these concepts.

Do you have a hint, I am lost in the Python documentation?


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


pytz might help you out here. Like viraptor said, ideally you'd store all your datetimes as unix UTC timestamps, and only localize the time when you print it out.

0

精彩评论

暂无评论...
验证码 换一张
取 消