2016-08-06 6 views
0

複数の日付書式をPythonのdatetimeオブジェクトに変換する簡単な方法はありますか?最終的に、これらはDATE型のMySQLデータベースに挿入されます。私が受信されるかもしれないデータの種類の複数の日付書式をdatetime Pythonに変換する方法はありますか

例:2014

2008年8月2日

2007年4月2日

私はこれらがなりたい変換さ:

2008-08-02

2007-04-02

2014-05-00

これを実行するための簡単な方法はありますか私は、各シナリオハードコードする必要がありますか?

答えて

2

第三者dateutilライブラリを使用します。

必要な形式に変換する
>>> from dateutil import parser 
>>> parser.parse("August 2, 2008") 
datetime.datetime(2008, 8, 2, 0, 0) 
>>> parser.parse("04-02-2007") 
datetime.datetime(2007, 4, 2, 0, 0) 
>>> parser.parse("May 2014") 
datetime.datetime(2014, 5, 6, 0, 0) 

>>> parser.parse("August 2, 2008").strftime('%Y-%m-%d') 
'2008-08-02' 
>>> parser.parse("04-02-2007").strftime('%Y-%m-%d') 
'2007-04-02' 
>>> parser.parse("May 2014").strftime('%Y-%m-%d') 
'2014-05-06' 

あなたがピップでそれをインストールすることができます。

pip install python-dateutil 

も見

>>> parser.parse("May 2014") 
datetime.datetime(2014, 5, 6, 0, 0) 
>>> # As you wanted day to be 0 and that is not valid 
... 
>>> datetime.datetime(2014, 5, 0, 0, 0) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: type object 'datetime.datetime' has no attribute 'datetime' 
>>> # Workaround: 
... 
>>> from datetime import datetime 
>>> datedefault = datetime.now().replace(day=1, hour=0, minute=0, second=0, microsecond=0) 
>>> parser.parse("May 2014",default=datedefault).strftime('%Y-%m-%d') 
'2014-05-01' 

日付文字列にdayが指定されておらず、デフォルトも指定されていない場合は、現在の日付が使用されます。今日は06 Aug 2016であるため、"May 2014"の回答の最初のセクションでは、その日を0に置き換えました。

+0

ありがとうございました!何かを確認したいだけです:なぜ2014年5月は日付として6番目のものとして解析されるのですか? – user2827048

+0

@ user2827048私は答えを更新しました。 –

0

あなたはまた、dateparserチェックアウトする場合があります

>>> import dateparser 
>>> dates = ['August 2, 2008', '04-02-2007', 'May 2014'] 
>>> [dateparser.parse(d, settings={'PREFER_DAY_OF_MONTH': 'first'}).strftime('%Y-%m-%d') for d in dates] 
['2008-08-02', '2007-04-02', '2014-05-01'] 

プラス側は、あなたが最後または現在、月の最初の日のいずれかを使用する(例えば、2014年5月)行方不明の日と日付を記入するように指定することができます。

関連する問題