Изменение метки времени Unix на другой часовой пояс - PullRequest
7 голосов
/ 15 июля 2011

Я получаю метку времени Unix из веб-службы в программе Python.Эта временная метка находится в часовом поясе США.Чтобы вставить его в базу данных MySQL с другими объектами, локализованными во Франции, я хотел бы преобразовать эту временную метку во французский часовой пояс.

Я мог бы сделать это с помощью математических функций, но существует проблема дневного света.экономия времениЯ бы предпочел использовать специфичные для Python функции времени и даты, которые должны иметь дело с этими понятиями.

У вас есть подсказка, я потерялся в документации по Python?

Ответы [ 3 ]

5 голосов
/ 15 июля 2011

У меня была похожая проблема в прошлом, когда временные метки файлов, которые мы загружали у поставщика услуг, имели временные метки, соответствующие часовому поясу PST.Следующее помогло мне сделать преобразование:

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
5 голосов
/ 15 июля 2011

Если это действительно метка времени Unix, то она основана на UTC. Просто интерпретируйте это правильно для вашего варианта использования. Применяйте перевод часового пояса только тогда, когда вам нужно напечатать эту дату в виде текста.

Если вы храните его как метку времени на своей стороне, держите его точно таким же, как оно.

1 голос
/ 15 июля 2011

pytz может помочь вам здесь.Как сказал viraptor, в идеале вы должны хранить все свои даты в виде UTC-меток Unix и локализовать только время, когда их распечатываете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...