【问题标题】:Convert datetime list into date python将日期时间列表转换为日期python
【发布时间】:2017-05-14 05:44:33
【问题描述】:

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

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

【问题讨论】:

  • timestamps 已经是datetime 对象的列表;或者更准确地说,该列表中的至少一个对象datetime 对象。你不能使用datetime.strptime()(注意那里的p)将它们解析为datetime对象再次
  • 您的for d in dates 列表理解不必要地使用了未绑定的datetime.strftime() 方法;只需直接在 datetime 实例上调用该方法即可。

标签: python list date datetime


【解决方案1】:

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

只需对ts 中的所有对象调用datetime.strftime() method 即可对其进行格式化:

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']

如果您在timestamps 中有字符串和datetime 实例的混合,您将不得不进行一些额外的处理:

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]

【讨论】:

  • 还有一个问题。转换后如何在日期上添加一天?使用 datetime.timedelta(1) 不起作用,因为它现在是一个字符串。有简单的解决方法吗?
  • 在转换为字符串之前添加您的时间增量(d + timedelta(days=1)).strftime('%m-%d-%Y') 会让你在一个表达式中做到这两点。
  • 非常感谢,这正是我正在寻找的东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-19
  • 2020-05-26
  • 2010-12-28
  • 2017-12-18
  • 2014-07-01
  • 1970-01-01
相关资源
最近更新 更多