2016-02-23 3 views
0

Кажется, что существует много путаницы в Интернете при выполнении очень простой вещи: создайте объект datetime с часовым поясом UTC с учетом секунд с момента unix в часовой пояс UTC. В принципе, я всегда хочу работать в абсолютном времени/UTC.Как создать объект datetime, указанный в секундах с момента unix?

Я использую Python 3.5 (последний сейчас), и хотите, чтобы просто получить datetime объект в контексте UTC (+ 0/Zulu смещение) от точки значения с плавающей истекших секунд с 1970 Jan 01.

Это неправильно, поскольку первый раз создается в моем локальном часовом поясе, а затем я пытаюсь перейти на UTC.

import datetime 
import pytz 
dt = datetime.datetime.fromtimestamp(my_seconds).replace(tzinfo=pytz.UTC) 

ответ

3

Python предоставил метод utcfromtimestamp только для этого случая. utcfromtimestamp

import datetime 

seconds = 0 
utcdate_from_timestamp = datetime.datetime.utcfromtimestamp(seconds) 
0

Если my_seconds является POSIX метка затем преобразовать его в datetime в Python 3:

#!/usr/bin/env python3 
from datetime import datetime, timedelta, timezone 

utc_dt = datetime(1970, 1, 1, tzinfo=timezone.utc) + timedelta(seconds=my_seconds) 
utc_dt = datetime.fromtimestamp(my_seconds, timezone.utc) 
naive_utc_dt = datetime.utcfromtimestamp(my_seconds) 

Если ваш местный часовой пояс является «право» (не POSIX), то только первая формула является (другие интерпретируют my_seconds как временную метку TAI с datetime(1970, 1, 1, 0, 0, 10) TAI эпохи в этом случае).

The first formula is more portable and may support a wider input range than the others.

Результаты 1-го и 2-го выражения могут отличаться из-за rounding errors on some Python versions.

2-й и 3-й вызовы должны отличаться только на tzinfo attibute (последний возвращает наивный объект datetime (.tzinfo is None)). Вы должны предпочесть объекты datetime, относящиеся к часовому поясу, чтобы избежать двусмысленности.

 Смежные вопросы

  • Нет связанных вопросов^_^