Python中如何将日期转换为人性化可读格式(如明天、2天前等)?是否有现成工具包?
推荐两个现成的Python工具包实现日期转人性化可读格式
当然有现成的工具包能帮你省去自定义判断的麻烦!你提到的dateparser是做人性化字符串转日期的,而要实现反向的日期转人性化字符串,这两个库非常好用:
1. Arrow
Arrow是一个功能强大的日期时间处理库,自带的humanize()方法完美契合你的需求,能自动生成类似「Yesterday」「Tomorrow」「Last Sunday」「In 3 days」这样的描述。
安装
pip install arrow
使用示例
from datetime import date, timedelta import arrow today = date.today() for d in range(-10, 10, 1): target_date = arrow.get(today + timedelta(days=d)) # humanize方法默认输出相对距离,加上only_distance=False会包含具体日期名称(比如周几) human_readable = target_date.humanize(only_distance=False) # 针对"day after tomorrow"这种特殊需求,加个小判断调整输出 if (target_date - arrow.get(today)).days == 2: human_readable = "Day after Tomorrow" print(f"{target_date.date()} ({d}): {human_readable}")
这个示例的输出和你自定义代码的结果几乎一致,仅需一行小判断就能匹配「Day after Tomorrow」的特殊格式,其余场景Arrow都能自动处理。
2. Humanize
Humanize是专门用来生成人性化文本的轻量库,其中的日期相关方法也能实现你的需求。
安装
pip install humanize
使用示例
from datetime import date, timedelta import humanize today = date.today() for d in range(-10, 10, 1): target_date = today + timedelta(days=d) diff_days = (target_date - today).days if abs(diff_days) <= 1: human_readable = humanize.naturalday(target_date) elif diff_days == 2: human_readable = "Day after Tomorrow" elif diff_days == -2: human_readable = "2 days ago" elif abs(diff_days) < 4: human_readable = humanize.relativize_date(target_date, today) elif abs(diff_days) <=7: prefix = "Last" if diff_days <0 else "Next" human_readable = f"{prefix} {target_date.strftime('%A')}" else: human_readable = f"On {target_date.strftime('%d-%m-%Y')}" print(f"{target_date} ({d}): {human_readable}")
Humanize更轻量化,但需要你补充少量逻辑来覆盖「Last/Next + 周几」这类场景,适合对包体积有要求的场景。
总结
如果你想要最省心的解决方案,Arrow是首选,它的humanize()方法几乎能覆盖你所有的需求,仅需少量调整就能完全匹配你的自定义逻辑;如果追求轻量,Humanize也能满足需求,只是需要补充一些周几相关的判断。
内容的提问来源于stack exchange,提问作者ujjaldey
相关产品推荐
相关产品推荐

