1

我正在从旧系统转换许多晦涩的日期格式。日期被解包/处理为字符串并转换为 ISO 8601 格式。

这个特定的函数试图将 YYMMDD0F 转换为 YYYYMMDD——函数名说明了一切。2000 年的日期使情况变得混乱,显然这不是处理它们的最pythonic 方式。我怎样才能更好地使用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)  
4

2 回答 2

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'
于 2014-03-11T14:17:51.663 回答
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")
于 2014-03-11T14:18:10.993 回答