2011-08-04 5 views
8

に日付文字列を変換し、私はこの形式で日付文字列の束を持っている: -YYYYMMDD

30th November 2009 
31st March 2010 
30th September 2010 

が、私はこのようにそれらをしたい: - 私はこれをやっている現在

YYYYMMDD 

: -

parsed_date = "30th November 2009" 
    part = parsed_date.split(' ') 
    daymonth = part[0].strip(string.ascii_letters) 
    mytime = daymonth+" "+part[1]+" "+part[2] 
    time_format = "%d %B %Y" 
    cdate = time.strptime(mytime, time_format) 
    newdate = str(cdate[0])+str(cdate[1])+str(cdate[2]) 

それは動作しますが、私はより良い方法があると確信している...

答えて

10

dateutil試してみてください。

from dateutil import parser 

dates = ['30th November 2009', '31st March 2010', '30th September 2010'] 

for date in dates: 
    print parser.parse(date).strftime('%Y%m%d') 

出力:

20091130 
20100331 
20100930 

またはあなたはそれが標準datetimeモジュールを使用して行いたい場合:

from datetime import datetime 

dates = ['30th November 2009', '31st March 2010', '30th September 2010'] 

for date in dates: 
    part = date.split() 
    print datetime.strptime('%s %s %s' % (part[0][:-2]), part[1], part[2]), '%d %B %Y').strftime('%Y%m%d') 
+0

ありがとう、thats perfect :) –

5

あなたはほとんどstrptime and strptime from the datetime moduleの組み合わせでこれを行うことができます。

問題は、組み込み形式では30 November 2010のような日付がサポートされていますが、30th November 2010ではサポートされていないという問題があります。下の例では、私はa regular expression substitutionを使って問題の文字を取り除いています。正規表現では、 "st"、 "nd"、 "rd"、または "th"の前に桁があるかどうかを調べ、空の文字列で置き換えて文字列から削除します。 )

>>> import re 
>>> from datetime import datetime 
>>> mydate = "30th November 2009" 
>>> mydate = re.sub("(?<=\d)(st|nd|rd|th)","",mydate) 
>>> mydate 
'30 November 2009' 
>>> mydatetime = datetime.strptime(mydate,"%d %B %Y") 
>>> mydatetime 
datetime.datetime(2009, 11, 30, 0, 0) 
>>> mydatetime.strftime("%Y%M%d") 
'20090030' 
関連する問題