将日期时间转换为字符串并格式化
我有一个包含日期的列表(不过这些日期不是以日期时间格式存储的,而是以字符串的形式):
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']