1

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

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

4 回答 4

2

许多数据库接受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。

于 2012-05-03T11:09:33.953 回答
0

我会将时间存储为纯整数,以纪元以来的秒数(UNIX 时间戳)为单位。这样,您可以轻松地将其存储到任何数据库中。%s格式说明符将strftimeUNIX 时间戳作为字符串返回——所以类似于

int(datetime.datetime.now().strftime('%s'))

应该管用。然后,您可以使用 将时间戳转换回datetime对象datetime.datetime.fromtimestamp(…)

于 2012-05-03T11:17:37.123 回答
0

我不确定您要在数据库中存储哪个对象。正如 eumiro 所建议的,许多库允许您直接存储日期时间对象。但是假设您需要将其存储为字符串,但为什么不能按照数据库错误的提示(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可以解析这个,但不幸的是它似乎并不适用于所有平台。

于 2012-05-03T11:21:33.207 回答
0

将此格式用于date1and 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

您报告的错误消息清楚地表明您需要这种格式。

于 2012-05-03T11:13:52.987 回答