Временная метка с UTC и любым другим часовым поясом совпадает со стрелкой

import arrow    
print arrow.utcnow()
print arrow.utcnow().timestamp
print arrow.utcnow().to('Asia/Kolkata')
print arrow.utcnow().to('Asia/Kolkata').timestamp

Мне нужна временная метка (в int) часового пояса "Азия / Калькутта", которая равна +5:30 от utc.

arrow.utcnow() а также arrow.utcnow().to('Asia/Kolkata') выходят, чтобы отличаться, и второй +5: 30 первый, как и ожидалось.

Тем не мение, arrow.utcnow().timestamp а также arrow.utcnow().to('Asia/Kolkata').timestamp все еще выходят, чтобы быть такими же.

Я уверен, что мне здесь не хватает чего-то очень простого, но кто-нибудь может это объяснить?

2 ответа

Решение

Я думаю, что "метка времени", по определению, всегда в UTC:

Время Unix (или эпоха Unix, или время POSIX, или временная метка Unix) представляет собой систему для описания моментов времени, определяемых как количество секунд, прошедших с полуночного универсального координированного времени (UTC) 1 января 1970 года, не считая високосных секунд.

Если вы берете свою локализованную строку времени, конвертируете ее в дату времени UTC (то есть, 5 часов вечера по Калькутте становится 5 часами по UTC), тогда вы можете получить метку времени, которая соответствует местному времени часов. Пример:

import arrow    
print arrow.utcnow()
print arrow.utcnow().timestamp
kolkata = arrow.utcnow().to('Asia/Kolkata')
print kolkata.replace(tzinfo='UTC').timestamp

Временные метки указаны в формате UTC, это также описано в документации Arrow.

отметка времени

Возвращает представление метки времени объекта Arrow в формате UTC.

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

classmethod fromtimestamp(timestamp, tzinfo=None)

Создает объект Arrow из временной метки, преобразованной в заданный часовой пояс.

Параметры: timestamp - временная метка типа int или float, или str, которая преобразуется в любую из них. tzinfo - (необязательно) объект tzinfo. По умолчанию местное время. Метки времени всегда должны быть в формате UTC. Если у вас есть не-UTC отметка времени:

arrow.Arrow.utcfromtimestamp(1367900664).replace(tzinfo='US/Pacific') <Arrow [2013-05-07T04:24:24-07:00]>

Полные документы здесь:

http://arrow.readthedocs.io/en/latest/

Другие вопросы по тегам