2014-03-11 5 views
1

Я преобразовываю многие неясные форматы даты из старой системы. Даты распаковываются/обрабатываются как строки и преобразуются в формат ISO 8601.python string to date ISO 8601

Эта конкретная функция пытается преобразовать YYMMDD0F в YYYYMMDD - имя функции говорит все. Даты с 2000 года делают это грязным и, очевидно, это не самый пифонический способ их обработки. Как я могу сделать это лучше, используя dateutil.parser?

def YYMMDD0FtoYYYYMMDD(date): 
    YY = date[0:2] 
    MM = date[2:4] 
    DD = date[4:6] 
    if int(YY) >= 78: 
     YYYY = '19%s' % YY 
    elif 0 <= int(YY) <= 77 and MM!='' and MM!='00': 
     YYYY = '20%s' % YY 
    else: 
     YYYY = '00%s' % YY 
    return "%s-%s-%s" % (YYYY, MM, DD) 

ответ

1

Вы можете посмотреть на datetime модуля. Используя свои функции форматирования даты, вы можете сделать что-то вроде этого:

>>> import datetime as dt 
>>> ds = '0104160F' 
>>> parsed = dt.datetime.strptime(ds, "%y%m%d0F") 
>>> parsed 
datetime.datetime(2001, 4, 16, 0, 0)  
>>> reformatted = dt.datetime.strftime(parsed, "%Y-%m-%d") 
>>> reformatted 
'20010416' 

В функции, вы можете использовать их следующим образом:

def YYMMDD0FtoYYYYMMDD(date): 
    return dt.datetime.strftime(dt.datetime.strptime(date, "%y%m%d0F"), "%Y-%m-%d") 
+0

Я нуждался взгляда со стороны на это. Большое спасибо. – user1645914

1

Вам не нужно использовать dateutil, вы можете сделать это с datetime.strptime/.strftime: использование

from datetime import datetime 

def YYMMDD0FtoYYYYMMDD(date): 
    return datetime.strptime(date[:6], "%y%m%d").strftime("%Y-%m-%d") 

Пример:

>>> YYMMDD0FtoYYYYMMDD('1403110F') 
'2014-03-11'