Временная метка с 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]>
Полные документы здесь: