将日期时间转换为字符串并格式化

2 投票
1 回答
1017 浏览
提问于 2025-04-18 12:07

我有一个包含日期的列表(不过这些日期不是以日期时间格式存储的,而是以字符串的形式):

MyList = ['25/4/2014', '2/12/2014', '15/7/2014']

我想把这个列表从最早的日期排序到最新的日期。我写了以下代码:

MyList = ['25/4/2014', '2/12/2014', '15/7/2014']
MyList2 = []
for i in MyList:
    MyList2.append(datetime.strptime(i, "%d/%m/%Y"))
SortedList = sorted(MyList2)

Result = []
for n in SortedList:
    m = n.strftime('%d/%m/%Y')
    Result.append(m)
print Result

列表确实被排序了,但问题是格式有点不同:
['25/04/2014', '15/07/2014', '02/12/2014']

注意到日期和月份的数字前面多了一个“0”。

有没有办法让结果列表保持原来的格式,比如四月份显示为“4”而不是“04”?

非常感谢!

1 个回答

4

使用一个 key 函数配合 sorted() 方法,这样可以在排序的时候解析日期,但不会改变原来的值:

SortedList = sorted(MyList, key=lambda d: datetime.strptime(d, "%d/%m/%Y"))

这样,列表就会根据 key 函数返回的值进行排序,而不是直接根据原来的值。实际上,Python 会对这些值进行“装饰”(生成一个包含 (key(v), None, v) 的元组,其中 None 确保 v 不会在排序时造成干扰),然后对这些装饰后的值进行排序,最后再去掉装饰。

示例:

>>> from datetime import datetime
>>> MyList = ['25/4/2014', '2/12/2014', '15/7/2014']
>>> sorted(MyList, key=lambda d: datetime.strptime(d, "%d/%m/%Y"))
['25/4/2014', '15/7/2014', '2/12/2014']

撰写回答