Повторная обработка дат до 1970 года в MySQL и Python - PullRequest
2 голосов
/ 23 октября 2010

В моей базе данных MySQL у меня есть даты, восходящие к середине 1700-х годов, которые мне нужно каким-то образом преобразовать в целые числа в формате, аналогичном времени Unix.Значение int не имеет значения, поскольку я могу взять дату из моей базы данных или из пользовательского ввода и сгенерировать тот же самый int.Мне нужно использовать MySQL для генерации int на стороне базы данных и python для преобразования даты от пользователя.

Обычно функция UNIX_TIMESTAMP выполняет это в MySQL, но длядата до 1970 года всегда возвращает ноль.

Функция MySQL TO_DAYS также может работать, но я не могу взять дату из пользовательского ввода и использовать Python для создания тех же значений, что иэта функция создает в MySQL.

Так что в основном мне нужна функция типа UNIX_TIMESTAMP, которая работает в MySQL и Python для дат между 1700-01-01 и 2100-01-01.

Поставьте другуюКстати, этот псевдокод MySQL:

select 1700_UNIX_TIME(date) from table;

Должен быть равен этому коду Python:

1700_UNIX_TIME(date)

Ответы [ 2 ]

2 голосов
/ 23 октября 2010

По ссылке, которую вы дали,

Given a date date, returns a day number (the number of days since year 0).

mysql> SELECT TO_DAYS(950501);
        -> 728779
mysql> SELECT TO_DAYS('2007-10-07');
        -> 733321

Соответствующие числа в Python:

>>> import datetime
>>> datetime.date(1995,5,1).toordinal()
728414
>>> datetime.date(2007,10,7).toordinal()
732956

Таким образом, отношение: mySQL_int == Python_int + 365, и вы можете конвертировать в другом направлениииспользуя метод класса fromordinal:

>>> datetime.date.fromordinal(728779 - 365)
datetime.date(1995, 5, 1)
2 голосов
/ 23 октября 2010

У меня не установлен MySQL, но когда я смотрю здесь: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_to-days - я вижу пример TO_DAYS('2008-10-07'), возвращающий 733687.

Следующая функция Python возвращает datetime(2008,10,7).toordinal() = 733322, что на 365 меньше, чем вывод MySQL.

Итак, примите это:

from datetime import datetime

query = '2008-10-07'
nbOfDays = datetime.strptime(query, '%Y-%m-%d').toordinal() + 365

и он должен работать для дат между 1700 и 2100.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...