2010-08-25 3 views
3

Привет всем! У меня проблемы с часовым поясом.Преобразование временной метки Python unix и часовой пояс

У меня есть штамп времени 2010-07-26 23:35:03

То, что я действительно хочу сделать, это вычесть 15 минут из этого времени.

Мой метод был простым преобразованием в unix-время, вычитанием секунд и преобразованием назад. Просто так?

Моя проблема заключается в том, что python настраивает возвращаемое время unix, используя мой местный часовой пояс, в настоящее время восточное летнее время, которое я считаю GMT -4.

Так что, когда я делаю это:

# packet[20] holds the time stamp 

unix_time_value = (mktime(packet[20].timetuple())) 

Я получаю 1280201703, который Вт, 27 июл 2010 03:35:03. Я могу это сделать:

unix_time_value = (mktime(packet[20].timetuple())) - (4 * 3600) 

, но теперь я должен проверить восточное стандартное время, которое -5 GMT и регулировать (4 * 3600) до (5 * 3600). Есть ли способ сказать python не использовать мой местный часовой пояс и просто преобразовать метку времени darn или есть простой способ взять пакет [20] и вычесть 15 минут?

ответ

6

Вычитание datetime.timedelta(seconds=15*60).

6

У online docs есть удобный стол (то, что вы называете «unix time», более правильно называется «UTC», для «Universal Time Coordinate» и «seconds since the epoch» является «меткой времени» в качестве поплавка. .):

Используйте следующие функции для преобразования между временными представлениями:

From      To       Use 

seconds since the epoch  struct_time in UTC   gmtime() 

seconds since the epoch  struct_time in local time localtime() 

struct_time in UTC   seconds since the epoch  calendar.timegm() 

struct_time in local time seconds since the epoch  mktime() 

где неквалифицированные имена функций происходят из time модуля (так как это, где документы находятся ;-). Итак, поскольку вы, очевидно, начинаете с struct_time in UTC, используйте calendar.timegm(), чтобы получить отметку времени (AKA «секунды с эпохи»), вычесть 15 * 60 = 900 (так как единицы измерения составляют секунды) и положить в результате «секунды с эпохи» обратно в a struct_time in UTC с time.gmtime. Или используйте time.mktime и time.localtime, если вы предпочитаете работать в местное время (но это может вызвать проблемы, если 15 минут могут оседлать момент, в котором он переключается на DST или обратно - всегда работает в UTC, много эхолот).

Конечно, для использования calendar.timegm вам потребуется import calendar в вашем коде (импорт обычно лучше всего размещается в верхней части скрипта или модуля).

+0

Хорошее объяснение. Спасибо! –

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