2016-08-26 1 views
1

У меня есть метка времени UNIX в секундах (например, 1294778181), что я могу преобразовать в UTC, используяВ Python, как получить локализованную метку времени только с пакетом datetime?

from datetime import datetime 
datetime.utcfromtimestamp(unix_timestamp) 

Проблемы, я хотел бы получить соответствующее время в 'US/Eastern' (с учетом любой DST), и я не могу использовать pytz и другие утилиты.

Доступно только datetime.

Возможно ли это? Спасибо!

+3

Вы могли бы написать свою собственную функцию, которая добавила бы/вычитала timedelta – iScrE4m

+1

да, я бы хотел этого избежать, потому что тогда вам нужно правильно отслеживать правильный сдвиг? –

+1

Yah, но я не могу думать иначе:/Вы всегда можете написать свой собственный pytz: D https://github.com/newvem/pytz/tree/master/pytz – iScrE4m

ответ

1

Самый простой, но не supersmart решение использует timedelta

import datetime 
>>> now = datetime.datetime.utcnow() 

US/Eastern на 5 часов меньше, чем в UTC, так что давайте просто создать thouse пять часов в качестве объекта timedelta и сделать его отрицательным, так что при чтении назад наш код, который мы можем видеть, что смещение -5, и что нет никакой магии, чтобы решить, когда добавлять и когда вычесть смещение часового пояса

>>> eastern_offset = -(datetime.timedelta(hours=5)) 
>>> eastern = now + eastern_offset 
>>> now 
datetime.datetime(2016, 8, 26, 20, 7, 12, 375841) 
>>> eastern 
datetime.datetime(2016, 8, 26, 15, 7, 12, 375841) 

Если мы хотим, чтобы исправить DST, мы бы запустить DateTime через smoething как это (не совсем точные, временные интервалы не мои xpertise (прибегая к помощи немного теперь меняется каждый год, гадость))

if now.month > 2 and now.month < 12: 
    if (now.month == 3 and now.day > 12) or (now.month == 11 and now.day < 5): 
     eastern.offset(datetime.timedelta(hours=5)) 

Вы могли бы пойти даже более подробно, добавьте часы, выяснить, как именно она меняется каждый год ... Я не собираюсь идти через все это :)

+0

отлично, но это учитывает DST? –

+1

К сожалению, это не так. его можно было бы исправить, если условия, применяющие другое смещение часа, когда дата datetime без года находится между двумя другими датами – iScrE4m

+1

@Noobie Я отредактировал свой ответ с широким представлением о том, как делать DST, но это довольно сложно, если вы хотите, чтобы он всегда быть точным. Вот почему у нас есть pytz – iScrE4m

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