保存在数据库中时出现python datetime问题

时间:2012-05-03 11:04:12

标签: python mysql database django datetime

在下面的代码中,我尝试将两种日期格式转换为通用日期格式,以便将其存储在我的数据库中。

import datetime
Date1 = '2012-04-24T12:58:52Z'

Date2 = 'Tue, 24 Apr 2012 12:56:21 -0700'

date1 = Date1.replace("T"," ").replace("Z","")
y = datetime.datetime.strptime(date1,"%Y-%m-%d %H:%M:%S")
date1 = datetime.datetime.strftime(y,"%A, %b %d %Y %H:%M:%S %p")

k = Date2.split(" ")
y = " ".join(k[1:len(k)-1])
date2 = datetime.datetime.strptime(y,"%d %b %Y %H:%M:%S")
date2 = datetime.datetime.strftime(date2,"%A, %b %d %Y %H:%M:%S %p")

print date1
print date2

它给了我以下输出。

Tuesday, Apr 24 2012 12:58:52 PM
Tuesday, Apr 24 2012 12:56:21 PM

但是当我尝试将其保存在数据库中时,它会抛出此错误。

Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format

任何人都可以帮我解决这个问题。 提前谢谢。

4 个答案:

答案 0 :(得分:2)

许多DB接受datetime.datetime个对象。

import datetime

Date1 = '2012-04-24T12:58:52Z'
dt1 = datetime.datetime.strptime(Date1, '%Y-%m-%dT%H:%M:%SZ')
# dt1: datetime.datetime(2012, 4, 24, 12, 58, 52)

现在尝试将dt1作为对象插入到DB中。

答案 1 :(得分:0)

将此格式用于date1date2

date1 = datetime.datetime.strftime(y,"%Y-%m-%dT%H:%M:%S")
date2 = datetime.datetime.strftime(date2,"%Y-%m-%dT%H:%M:%S")

这将导致:

2012-04-24T12:58:52
2012-04-24T12:56:21

您报告的错误消息明确指出您需要此格式。

答案 2 :(得分:0)

我会将时间存储为普通整数,以纪元(UNIX时间戳)为单位。这样,您可以毫不费力地将其存储到任何数据库中。 %s的{​​{1}}格式说明符将UNIX时间戳作为字符串返回 - 所以

的行。
strftime

应该有效。然后,您可以使用int(datetime.datetime.now().strftime('%s')) 将时间戳转换回datetime对象。

答案 3 :(得分:0)

我不确定您要在DB中存储哪个对象。正如eumiro建议的那样,许多库允许您直接存储datetime对象。但假设您需要将其存储为字符串,但为什么不能像数据库错误所示那样格式化datetime对象(YYYY-MM-DD HH:MM:ss)?

所以......就像这样:

 import datetime

 Date1 = '2012-04-24T12:58:52Z'
 d1 = datetime.datetime.strptime(Date1,"%Y-%m-%dT%H:%M:%SZ")
 d1.strftime("%Y-%m-%d %H:%M:%S") # Store this!

 Date2 = 'Tue, 24 Apr 2012 12:56:21 -0700'
 k = Date2.split(" ")
 y = " ".join(k[1:len(k)-1])
 d2 = datetime.datetime.strptime(y,"%d %b %Y %H:%M:%S")
 d2.strftime("%Y-%m-%d %H:%M:%S") # Store this!

这可能超出了您的问题的范围,但请注意,使用Date2,您将删除时区信息(-0700)。如果这对你很重要,你应该以某种方式解析并存储它。 %z中有一个strptime选项可以解析这个问题,但不幸的是它似乎并不适用于所有平台。