python字符串到目前为止ISO 8601

时间:2014-03-11 14:07:30

标签: python date-formatting iso8601 python-dateutil

我正在从旧系统转换许多不起眼的日期格式。日期将作为字符串解压缩/处理并转换为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)  

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分: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")