在下面的代码中,我尝试将两种日期格式转换为通用日期格式,以便将其存储在我的数据库中。
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
任何人都可以帮我解决这个问题。 提前谢谢。
答案 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)
将此格式用于date1
和date2
:
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
选项可以解析这个问题,但不幸的是它似乎并不适用于所有平台。