如何使用python将不同格式的日期转换为一种格式

red*_*ddy 4 python python-2.7

输入:一个日期字段,其包括以各种格式(包括:日期yyyy/dd/mmdd-mm-yyyy等),例如:

2017/5/23
22-04-2015
20150504
Run Code Online (Sandbox Code Playgroud)

输出:统一格式的日期字段。所有日期值都应转换为yyyymmdd格式。即上面的输入应生成输出为:

20170523
20150422
20150504
Run Code Online (Sandbox Code Playgroud)

我尝试使用dateutils但输出格式是 2015-05-23

from datetime import datetime
INPUT_FILENAME = 'date.txt'
OUTPUT_FILENAME = 'newfile.txt'
INPUT_DATE_FORMATS = {'column1dt': '%Y%m%d', 'column1dt': '%d/%m/%Y'}
OUTPUT_DATE_FORMAT = '%Y%m%d'
with open(INPUT_FILENAME, 'rt') as finput:
reader = finput.readlines()
with open(OUTPUT_FILENAME, 'wt') as foutput:
    print foutput 
    for row in reader: 
Run Code Online (Sandbox Code Playgroud)

Lau*_*RTE 6

以下是猜测日期字符串格式的方法:

import datetime

def guess_date(string):
    for fmt in ["%Y/%m/%d", "%d-%m-%Y", "%Y%m%d"]:
        try:
            return datetime.datetime.strptime(string, fmt).date()
        except ValueError:
            continue
    raise ValueError(string)
Run Code Online (Sandbox Code Playgroud)

使用以下示例:

samples = "2017/5/23", "22-04-2015", "20150504"

for sample in samples:
    print(guess_date(sample))
Run Code Online (Sandbox Code Playgroud)

你得到:

2017-05-23
2015-04-22
2015-05-04
Run Code Online (Sandbox Code Playgroud)

使用d.strftime("%Y%m%d")来选择你想要的格式:

for sample in samples:
    d = guess_date(sample)
    print(d.strftime("%Y%m%d"))
Run Code Online (Sandbox Code Playgroud)

您还可以使用dateutil.parser来解析任何格式的日期。

见示例:

>>> from dateutil.parser import *
>>> now = parse("Sat Oct 11 17:13:46 UTC 2003")
Run Code Online (Sandbox Code Playgroud)