Ключевые слова для поиска: python to local naive time without timezone
Итак. Допустим у вас есть время now с временной зоной в UTC.
now
datetime.datetime(2012, 12, 27, 16, 1, 54, 784864, tzinfo=<DstTzInfo 'Europe/Moscow' MSK+4:00:00 STD>)
Из него можно легко получить timedelta-объект, содержащий разницу между UTC-временем и локальным.
offset = now.utcoffset()
datetime.timedelta(0, 14400)
14400 — это секунды, в часах, как известно, это +4.
Затем, нужно из времени now убрать информацию о зоне, чтобы получить «наивное» время (naive) и затем, прибавить offset.
now_without_timezone = now.replace(tzinfo = None)
datetime.datetime(2012, 12, 27, 16, 1, 54, 784864)
later_without_timezone = now_without_timezone + offset
datetime.datetime(2012, 12, 27, 20, 1, 54, 784864)
Конечно, все очень просто. Но все функции модулей datetime.datetime и pytz как-то сразу не укладываются в голове. Поэтому и полезна такая инструкция.
выглядит как говнокод
ОтветитьУдалитьвремя независимо от таймзоны - это long, одинаковый во всех поясах. для того, чтобы вывести время для какой-либо тайм-зоны, должен использоваться форматтер, который сделает текстовое значение в зависимости от выбранного формата и зоны
прибавляя offset ко времени, мы получаем время через 4 часа по UTC, а не время в 4-м часовом поясе
Это не так. Мне понадобилось именно время без временной зоны и не в UTC. Так называемое naive time.
Удалитьа зачем оно бывает нужно?
УдалитьMatplotlib (питоновская библиотечка), например, не понимает время с зонами. Ему нужно обычное подавать. А график нужно было построить в местном времени.
Удалитьаа, понял, чтобы было совместимо с чужим говнокодом!
Удалить