将日期时间列表转换为日期python

时间:2016-12-29 21:34:01

标签: python list date datetime

我有一个日期时间列表,并希望使用以下代码将其转换为日期:

dates = (datetime.strptime(ts, '%Y-%m-%d %H:%M:%S') for ts in timestamps)
date_strings = [datetime.strftime(d, '%m-%d-%Y') for d in dates]

日期时间列表如下所示:

  

[datetime.datetime(2016,11,21,0,0),datetime.datetime(2016,11,   22,0,0),datetime.datetime(2016,11,23,0,0)]

我收到以下错误消息:

  

TypeError:strptime()参数1必须是str,而不是datetime.datetime

1 个答案:

答案 0 :(得分:5)

timestamps序列中的值似乎是而不是字符串;它们已经是datetime个对象。您无需进一步解析这些内容。你也可以混合使用字符串和datetime个对象;抛出的异常是因为 timestamps中的至少一个值已经是datetime个实例。

只需在ts中的所有对象上调用vtable即可对其进行格式化:

date_strings = [d.strftime('%m-%d-%Y') for d in timestamps]

演示:

>>> import datetime
>>> timestamps = [datetime.datetime(2016, 11, 21, 0, 0), datetime.datetime(2016, 11, 22, 0, 0), datetime.datetime(2016, 11, 23, 0, 0)]
>>> [d.strftime('%m-%d-%Y') for d in timestamps]
['11-21-2016', '11-22-2016', '11-23-2016']

如果您在datetime中有 mix 字符串和timestamps个实例,则必须进行一些额外处理:

def convert_as_needed(ts):
    try:
        # parse strings
        datetime.strptime(ts, '%Y-%m-%d %H:%M:%S')
    except TypeError:
        # assume it is already a datetime object
        return ts

dates = map(convert_as_needed, timestamps)
date_strings = [d.strftime('%m-%d-%Y') for d in dates]
相关问题