2012-04-12 9 views
0

次の日付パターンと日付の変換を行う際にデフォルトの「未来」今年dateutil

1st January 
30th April 

は簡単dateutil.parser.parse()経由datetime.dateのインスタンスに解析され :

In [1]:from dateutil.parser import parse 

In [2]: parse('1st January') 
Out[2]: datetime.datetime(2012, 1, 1, 0, 0) 

In [3]: parse('8th April') 
Out[3]: datetime.datetime(2012, 4, 30, 0, 0) 

どのよう将来の日付を解析から返されますか?

e.e.e. '1st January'を解析すると2012年1月1日ではなくdatetime.datetime(2013, 1, 1, 0, 0)、2013年1月1日が返されます。

答えて

2

から始まるmensi's excellent answer to your previous questionで始まり、指定された年を指定せずに日付を取得し、それらが過去でないことを確認するソリューションです。年が文字列の一部として与えられている場合は、そのまま保持されます。

import datetime 
import dateutil 

def parse(date_string): 
    result = dateutil.parser.parse(date_string, default=datetime.datetime(1581, 1, 1)) 
    if result.year == 1581: 
     now = datetime.datetime.now() 
     result = result.replace(year=now.year) 
     if result < now: 
      result = result.replace(year=now.year + 1) 
    return result 

parse('8th April') 
+0

ありがとうございます!しかし、今は動作しません。 'dateutil.parse'は動作しませんので、' from dateutil.parser import parse'で 'parse'をインポートし、' parse'メソッドの名前を 'parse_future'に変更します。しかし、一度実行すると、 'datetime.datetime(1581、4、8、0、0)'が返されます。 –

+0

@JosvicZammit、私はそれを修正したと思う。 –

+0

私はデバッグしています。 'result.replace(year = now.year + 1)'は動作しない部分です。 –

関連する問題