在 MySQL 和 Python 中以可重复的方式处理 1970 年之前的日期

2024-03-04

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

通常情况下,UNIX_TIMESTAMP 函数 http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_unix-timestamp,将在 MySQL 中完成此操作,但对于 1970 年之前的日期,它始终返回零。

The TO_DAYS MySQL 函数 http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_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)

我这里没有安装MySQL,但是当我看这里时:http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_to-days 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 之间的日期。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 MySQL 和 Python 中以可重复的方式处理 1970 年之前的日期 的相关文章