我有一个日期时间列表,并希望使用以下代码将其转换为日期:
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
答案 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]