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

any1は私がこの問題を解決するのを手伝ってくれますか?前もって感謝します。

4

4 に答える 4

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に挿入してみます。

于 2012-05-03T11:09:33.953 に答える
0

エポック(UNIXタイムスタンプ)からの秒数で、時間を単純な整数として格納します。このようにして、面倒なことなく任意のデータベースに保存できます。の%sフォーマット指定子strftimeは、UNIXタイムスタンプを文字列として返します。

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

動作するはずです。datetime次に、を使用してタイムスタンプをオブジェクトに戻すことができますdatetime.datetime.fromtimestamp(…)

于 2012-05-03T11:17:37.123 に答える
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

報告するエラーメッセージには、この形式が必要であることが明確に示されています。

于 2012-05-03T11:13:52.987 に答える
0

どのオブジェクトを DB に保存しようとしているのか正確にはわかりません。eumiro が示唆するように、多くのライブラリでは 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、残念ながらすべてのプラットフォームで機能するとは限りません。

于 2012-05-03T11:21:33.207 に答える