有没有简单的方法可以将像(1327天)这样的天值总结为以下格式:
xx years; xx month; xx days
无需为每个值使用单独的变量。
最好用一个命令。
答案1
对于包含数月或数年的持续时间,必须参考特定日期,因为不同的月份或不同的年份具有不同的长度。
要知道从现在到 1327 天有多少年/月/日,日期工具:
$ ddiff -f '%Y years, %m months, %d days' today "$(dadd now 1327)"
3 years, 7 months, 19 days
(有时您可能会发现ddiff
可用 asdatediff
或dateutils.ddiff
;同样适用于dadd
)。
这就是我在 2017-09-25 得到的结果(因为那是从 2017-09-25 到 2021-05-14)。如果我在 2018 年 3 月 1 日运行它,我会得到:
3 years, 7 months, 17 days
因为那是从 2018-03-01 到 2021-10-18。
就在2018年3月1日,1327天前会给3 years, 7 months, 16 days
.
答案2
我认为这对于 Bash 中相当准确的解决方案(即关于闰日等日历怪异问题)来说有点太复杂了。尝试使用日历编程库(例如 Python):
#!/usr/bin/env python3
import sys, calendar
from datetime import *
difference = timedelta(days=int(sys.argv[1]))
now = datetime.now(timezone.utc).astimezone()
then = now - difference
years = now.year - then.year
months = now.month - then.month
days = now.day - then.day
if days < 0:
days += calendar.monthrange(then.year, then.month)[1]
months -= 1
if months < 0:
months += 12
years -= 1
print('{} year(s); {} month(s); {} day(s)'.format(years, months, days))
调用示例:
$ ./human-redable-date-difference.py 1327
3 year(s); 7 month(s); 19 day(s)
当然,您可以根据自己的喜好调整输入和输出格式,以根据天数以外的其他因素选择时间差异。