Преобразование даты и времени Python в метку времени и обратно в UTC все еще использует местный часовой пояс - PullRequest
29 голосов
/ 11 мая 2011

Я работаю с кодом, который дает мне метки времени utc, и я хочу преобразовать их в соответствующие даты. К сожалению, когда я тестирую простые случаи с pytz, у даты и времени добавляется 6 часов (смещение CST к UTC). Мне нужно, чтобы данные часовых поясов были правильными, потому что я также вычисляю разницу между другими часовыми поясами. Любые идеи, почему и как преобразовать метку времени UTC в дату и время UTC?

In [1]: import pytz

In [2]: from datetime import datetime

In [3]: import time

In [4]: datetime.fromtimestamp(time.mktime(datetime(7,1,1, tzinfo=pytz.UTC).timetuple()), tz=pytz.UTC)
Out[4]: datetime.datetime(2007, 1, 1, 6, 0, tzinfo=<UTC>)

In [5]: datetime.fromtimestamp(time.mktime(datetime(7,1,1).utctimetuple()), tz=pytz.UTC)
Out[5]: datetime.datetime(2007, 1, 1, 6, 0, tzinfo=<UTC>)

In [6]: datetime.fromtimestamp(time.mktime(datetime(7,1,1).utctimetuple()))
Out[6]: datetime.datetime(2007, 1, 1, 0, 0)

Ответы [ 3 ]

79 голосов
/ 22 февраля 2014

Чтобы получить наивный объект datetime, который представляет время в формате UTC из отметки времени «секунд с начала эпохи»:

from datetime import datetime

utc_dt = datetime.utcfromtimestamp(ts)

Если вы хотите получить осведомленный объект даты и времени для часового пояса UTC:

import pytz

aware_utc_dt = utc_dt.replace(tzinfo=pytz.utc)

Чтобы преобразовать его в другой часовой пояс:

tz = pytz.timezone('America/Montreal')
dt = aware_utc_dt.astimezone(tz)

Чтобы преобразовать метку времени в осведомленный объект даты и времени в заданном часовом поясе напрямую:

dt = datetime.fromtimestamp(ts, tz)
19 голосов
/ 11 мая 2011

Хм Я нашел ответ здесь: Как указать часовой пояс (UTC) при конвертации в Unix-время?(Python)

In [101]: ts = calendar.timegm(datetime(2010, 7, 1, tzinfo=pytz.utc).timetuple())

In [102]: datetime.fromtimestamp(ts, tz=pytz.utc)
Out[102]: datetime.datetime(2010, 7, 1, 0, 0, tzinfo=<UTC>)
1 голос
/ 11 мая 2011

Вы бывали в часовом поясе CST США или его эквиваленте?

Похоже, это показывает, какое время было в UTC, когда местное время было полуночью 1 января 2007 года.

...