将Python字符串转换为ISO 8601日期
我正在把一个旧系统中的很多不常见的日期格式转换成标准的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")