gpt4 book ai didi

python - 对没有年份但有 2 月 29 日的字符串日期列表进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 02:49:22 25 4
gpt4 key购买 nike

我有一个没有年份部分的日期列表,我需要对其进行排序。我对它们进行排序的代码在 2 月 29 日失败,并引发 ValueError: day is out of range for month 异常:

from datetime import datetime
a = [
'7-Mar 11:20:33', '7-Mar 10:30:22','22-Mar 22:33:11', '31-Mar 11:22:33',
'25-Mar 03:04:05', '1-Jan 00:00:00', '29-Feb 02:11:10'
]
a.sort(key=lambda date: datetime.strptime(date, "%d-%b %H:%M:%S"))

有什么方法可以用默认的闰年对这些日期进行排序吗?

排序后的列表应该是:

['1-Jan 00:00:00', '29-Feb 02:11:10', '7-Mar 10:30:22', '7-Mar 11:20:33',
'22-Mar 22:33:11', '25-Mar 03:04:05', '31-Mar 11:22:33']

最佳答案

您的日期没有年份,因此使用默认值 1900:

>>> datetime.strptime('7-Mar 11:20:33', "%d-%b %H:%M:%S")
datetime.datetime(1900, 3, 7, 11, 20, 33)

1900 年不是闰年,因此 1900 年 2 月 29 日不存在并引发异常。

如果您必须支持解析有闰日且没有年份的日期,请将您选择的年份作为字符串添加到要解析的值中,例如 '1904 ',然后解析出多余的年份编号:

>>> datetime.strptime('1904 29-Feb 02:11:10', "%Y %d-%b %H:%M:%S")
datetime.datetime(1904, 2, 29, 2, 11, 10)

解析时只需将年份作为字符串添加即可:

a.sort(key=lambda date: datetime.strptime('1904 ' + date, "%Y %d-%b %H:%M:%S"))

使用您的示例数据进行演示:

>>> sorted(a, key=lambda date: datetime.strptime('1904 ' + date, "%Y %d-%b %H:%M:%S"))
['1-Jan 00:00:00', '29-Feb 02:11:10', '7-Mar 10:30:22', '7-Mar 11:20:33', '22-Mar 22:33:11', '25-Mar 03:04:05', '31-Mar 11:22:33']

关于python - 对没有年份但有 2 月 29 日的字符串日期列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44327109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com