2

在我的 MySQL 数据库中,我的日期可以追溯到 1700 年代中期,我需要以某种方式将其转换为类似于 Unix 时间格式的整数。int 的值并不重要,只要我可以从我的数据库或用户输入中获取日期并生成相同的 int。我需要使用 MySQL 在数据库端生成 int,并使用 python 来转换用户的日期。

通常,UNIX_TIMESTAMP 函数会在 MySQL 中完成此操作,但对于 1970 年之前的日期,它总是返回零。

TO_DAYS MySQL 函数也可以工作,但我无法从用户输入中获取日期并使用 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)
4

2 回答 2

2

根据您提供的链接,

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)
于 2010-10-23T06:45:15.840 回答
2

我这里没有安装 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,比 MySQL 的输出少 365。

所以拿这个:

from datetime import datetime

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

它应该适用于 1700 到 2100 之间的日期。

于 2010-10-23T05:52:14.430 回答