首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MySQL和Python中以可重复的方式处理1970年之前的日期

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

Stack Overflow用户
提问于 2010-10-23 13:36:06
回答 2查看 529关注 0票数 2

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

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

TO_DAYS MySQL function也可以工作,但我不能从用户输入中获取日期,并使用Python来创建与此函数在MySQL中创建的值相同的值。

所以基本上,我需要一个像UNIX_TIMESTAMP这样的函数,它可以在1700-01-01和2100-01-01之间的MySQL和Python中工作。

换句话说,这段MySQL伪代码:

代码语言:javascript
复制
select 1700_UNIX_TIME(date) from table;

必须等于此Python代码:

代码语言:javascript
复制
1700_UNIX_TIME(date)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-23 13:52:14

我没有在这里安装MySQL,但当我查看这里:http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_to-days -我看到一个返回733687的示例TO_DAYS('2008-10-07')

下面的Python函数返回datetime(2008,10,7).toordinal() = 733322,比MySQL的输出少365%。

所以就拿这个来说:

代码语言:javascript
复制
from datetime import datetime

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

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

票数 2
EN

Stack Overflow用户

发布于 2010-10-23 14:45:16

根据你给出的链接,

代码语言:javascript
复制
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中对应的数字:

代码语言:javascript
复制
>>> import datetime
>>> datetime.date(1995,5,1).toordinal()
728414
>>> datetime.date(2007,10,7).toordinal()
732956

因此关系是:mySQL_int == Python_int + 365,您可以使用fromordinal类方法在另一个方向上进行转换:

代码语言:javascript
复制
>>> datetime.date.fromordinal(728779 - 365)
datetime.date(1995, 5, 1)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4002660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档