【发布时间】:2021-01-17 02:32:06
【问题描述】:
我正在使用 Datetime 生成一个随机日期列表,并且需要显示为 dd/mm/yy(例如 20 年 3 月 24 日是 2020 年 3 月 24 日)。我可以使用 strftime 对其进行排序,但是它会在从左到右时破坏排序,因此需要一天时间并按该顺序排序。
获取一个日期时间对象,转换成一个字符串进行格式化,然后将该字符串转换回一个日期时间对象进行排序,这似乎有点过头了。
如何正确排序此列表的日期?
提前感谢您!
import random
from datetime import datetime, timedelta
user_test_date = datetime.strptime("12/12/21", '%d/%m/%y')
ledger = []
''' Create date for transaction '''
def date_gen():
date_step = random.randrange(1, 60) # Set range of 2 months
raw_date = user_test_date + timedelta(days =- date_step) # Alter days value each loop
date = raw_date.strftime('%w %b %y') #Change format of date
ledger.append(date)
ledger.sort(key=lambda item: item[0], reverse=True) #Sort list of dates
for i in range(10):
date_gen()
print(ledger)
【问题讨论】:
-
每次添加日期时,您都在对账本进行排序;相反,您可以添加所有日期,然后对分类帐进行一次排序。推动这个想法;将所有日期作为
datetime对象添加到临时分类帐;对临时账本进行排序;然后ledger = [raw_date.strftime('%w %b %y') for raw_date in temporary_ledger] -
改进这个想法;你可以创建一个类
Ledger,它维护一个排序好的datetime对象集合,并使用一个返回字符串列表的方法Ledger.view()。 -
为什么不将
raw_date保留在列表中并仅将strftime用于打印? -
谢谢@Stef。我还没有尝试过这种方法,所以感谢提及。我可以很好地对日期时间对象进行排序,但是当我应用日期格式更改时,日期排序再次变得不正确。 ``` ['21 年 12 月 2 日','21 年 11 月 0 日','21 年 11 月 5 日','21 年 11 月 4 日','21 年 11 月 1 日','21 年 10 月 5 日','21 年 10 月 5 日','21 年 10 月 4 日', '0 Oct 21', '4 Oct 21'] ``` 这是输出的一个例子。也有 0 个值,但会到达该层
-
@Swain:如果我们忽略带有 0 的日期,那么您的列表似乎以相反的顺序排序。试试
.sort(reverse=True)或.sort(reverse=False)。您可能还会发现这个答案很有趣:Generate a random date between two other dates
标签: python sorting datetime strftime