Функция даты и времени SQLITE для отображения локального времени не работает
У меня есть база Sqlite с меткой времени в качестве первичного ключа, эта метка времени записывается как UTC. И я проверил, что записи являются правильными, согласно моему часовому поясу и летнему времени.
Я пытаюсь отобразить эти метки времени в своем приложении, но в формате локального времени, для этого я использую функцию: SELECT ... datetetime (timestamp, 'localtime').
Но то, что я получаю, это мое местное время плюс 1 час, я не знаю почему. Местное время на моем компьютере правильное, я использую Ubuntu 12.04 в качестве ОС.
Заранее спасибо за предложения.
2 ответа
ОК, у меня это есть. Да, даты являются "сегодняшними" днями (после 2000 года).
Я думаю, что проблема заключалась в том, что у меня есть метка времени в БД в виде строкового типа, поэтому, когда я делаю: SELECT datetime(Time,'localtime')... не работает должным образом, потому что у него нет tzinfo (не знает datetime). Таким образом, я получаю правильное время обработки данных после SELECT (в моем случае с python): 1.- Получить данные с помощью простого запроса SELECT 2.- Узнать дату и время в python в часовой пояс UTC (используя pytz libray) 3.- Преобразовать затем в местный часовой пояс (с модулями localize и astimezone)
Может ли это помочь вам?
Предостережения и ошибки
Вычисление местного времени в значительной степени зависит от прихоти политиков, и поэтому его трудно получить корректно для всех языков. В этой реализации стандартная функция C библиотеки localtime_r() используется для помощи в расчете местного времени. Функция localtime_r() C обычно работает только в период между 1970 и 2037 годами. Для дат вне этого диапазона SQLite пытается отобразить год в эквивалентный год в этом диапазоне, выполнить вычисления, а затем сопоставить год назад.
Эти функции работают только для дат между 0000-01-01, 00:00:00 и 9999-12-31, 23:59:59 (номера дней Джулидана с 1721059.5 по 5373484.5). Для дат вне этого диапазона результаты этих функций не определены.
Платформы Windows, отличные от Vista, поддерживают только один набор правил DST. Vista поддерживает только два. Поэтому на этих платформах исторические расчеты DST будут некорректными. Например, в США в 2007 году правила DST изменились. Платформы Windows, отличные от Vista, также применяют новые правила DST 2007 года ко всем предыдущим годам. Vista работает лучше, вернув результаты в 1986 году, когда правила также были изменены.
Все внутренние вычисления предполагают систему григорианского календаря. Предполагается также, что каждый день длится ровно 86400 секунд.