2013-04-29 19 views
13

Chcę przekonwertować ciąg taki jak ten "29-Apr-2013-15:59:02" na coś bardziej użytecznego.Konwersja (RRRR-MM-DD-HH: MM: SS) Data Data

Kreski można łatwo zastąpić spacjami lub innymi znakami. Ten format byłby idealny: "YYYYMMDD HH:mm:ss (20130429 15:59:02)".

Edit:

Niestety, nie miałem specjalnie zobaczyć odpowiedź w innym poście. Ale znowu jestem ignorantem, więc mogłem patrzeć na rozwiązanie i nie wiedziałem o tym. Mam to działa, ale nie uważam tego za "ładny".

#29-Apr-2013-15:59:02 

import sys, datetime, time 

#inDate = sys.argv[1] 
inDate = 29-Apr-2013-15:59:02 

def getMonth(month): 
    monthDict = {'Jan':'01','Feb':'02','Mar':'03','Apr':'04','May':'05','Jun':'06','Jul':'07','Aug':'08','Sep':'09','Oct':'10','Nov':'11','Dec':'12'} 
    for k, v in monthDict.iteritems(): 
     if month == k: 
      return v 

day = inDate[:2] 
#print day 
month = inDate[3:6] 
#print month 
year = inDate[7:11] 
#print year 
time = inDate[-8:] 
#print time 

newDate = year+getMonth(month)+day 
newDateTime = newDate+" "+time 

print newDate 
print newDateTime 

Jakieś przemyślenia na temat poprawy?

+7

Czy czytasz [ 'strftime()' i 'strptime()' zachowanie] (http://docs.python.org/2/library/datetime.html#strftime-strptime-behavior) dokumentacja? są tam przykłady, które powinny ci pomóc. –

+1

@Andbdrew - Ostrożnie: http://meta.stackexchange.com/questions/172758/what-have-you-tried-epidemic – mgilson

+0

Spróbowałbym dostosować sposób uzyskiwania tego ciągu daty, jeśli to możliwe. – cmd

Odpowiedz

27

Zastosowanie datetime.strptime() do analizowania ciąg inDate do obiektu data, użyj datetime.strftime() do produkcji w dowolnym formacie chcesz:

>>> from datetime import datetime 
>>> inDate = "29-Apr-2013-15:59:02" 
>>> d = datetime.strptime(inDate, "%d-%b-%Y-%H:%M:%S") 
>>> d 
datetime.datetime(2013, 4, 29, 15, 59, 2) 
>>> d.strftime("YYYYMMDD HH:mm:ss (%Y%m%d %H:%M:%S)") 
'YYYYMMDD HH:mm:ss (20130429 15:59:02)' 
Powiązane problemy