Changing a unix timestamp to a different timezone

后端 未结 3 713
旧巷少年郎
旧巷少年郎 2020-12-19 07:07

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, locali

相关标签:
3条回答
  • 2020-12-19 07:30

    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
    
    0 讨论(0)
  • 2020-12-19 07:30

    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 讨论(0)
  • 2020-12-19 07:35

    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.

    0 讨论(0)
提交回复
热议问题