在开发电报机器人时,您需要按日期对字典进行排序,以便按时间顺序输出新闻。问题在于关键格式(日期)的不同。有格式%d。%m在%H: m %,还有%d %m。
for k,v in sorted(Dnews_dict.items(), key=lambda x: DT.strptime(x[1].get("time"),'%d.%m.%Y at %H:%M')):
news = f"<b>{v['time']}</b>n"
f"{hlink(v['title'],v['url'])}"
await message.answer(news)
这段代码工作得很好,但只有一个日期类型。作为一个选项,我尝试添加字符串长度条件(长度是恒定的)。
if len(round_data) == 18:
for k,v in sorted(Dnews_dict.items(), key=lambda x:DT.strptime(x[1].get("time"),'%d.%m.%Y в %H:%M')):
news = f"<b>{v['time']}</b>n"
f"{hlink(v['title'],v['url'])}"
await message.answer(news)
else:
for k,v in sorted(Dnews_dict.items(), key=lambda x:DT.strptime(x[1].get("time"),'%d.%m at %H:%M')):
news = f"<b>{v['time']}</b>n"
f"{hlink(v['title'],v['url'])}"
await message.answer(news)
但是条件不起作用。但这种情况行不通。如何解决这种困境?输入图片描述
虽然我不熟悉电报机器人,但下面是处理具有混合格式的日期时间数据的方法,如果您已经隔离了包含日期时间数据的特定文本:
给定一个混合日期时间字符串数据的列表,格式如下:
datelist = ['08.02.2022 at 23:53',
'13.07 at 18:13',
'23.11.2022 at 19:55',
'15.02 at 01:06',
'09.07.2022 at 14:57',
'09.08 at 04:06',
'19.04.2022 at 07:19',
'28.10 at 21:56',
'19.10.2022 at 02:18',
'23.04 at 18:15']
from dateutil import parser #Utility for handling all the messy dates you encounter along the way
from dateutil.relativedelta import *
for dt in datelist:
print(parser.parse(dt))
收益率:
2022-08-02 23:53:00
2023-01-13 18:13:00
2022-11-23 19:55:00
2023-01-15 01:06:00
2022-09-07 14:57:00
2023-01-09 04:06:00
2022-04-19 07:19:00
2023-01-28 21:56:00
2022-10-19 02:18:00
2023-01-23 18:15:00
如果您关注的是2023年,您可以执行以下操作:
for dt in datelist:
dtx = parser.parse(dt)
if dtx.year == 2023:
dtx = dtx + relativedelta(year=2022)
print(dtx)
生成一个关键到2022年的结果:
2022-08-02 23:53:00
2022-01-13 18:13:00
2022-11-23 19:55:00
2022-01-15 01:06:00
2022-09-07 14:57:00
2022-01-09 04:06:00
2022-04-19 07:19:00
2022-01-28 21:56:00
2022-10-19 02:18:00
2022-01-23 18:15:00