将Python字符串转换为ISO 8601日期

1 投票
2 回答
1512 浏览
提问于 2025-04-17 21:47

我正在把一个旧系统中的很多不常见的日期格式转换成标准的ISO 8601格式。这些日期最开始是以字符串的形式处理的。

这个特定的函数是用来把YYMMDD0F格式的日期转换成YYYYMMDD格式的——函数名已经说明了一切。由于2000年以后的日期处理起来比较麻烦,所以这并不是最好的Python处理方式。我该如何利用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 个回答

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

你可能想看看 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")

撰写回答