bash - суммирует значение дня по годам, месяцу и оставшимся дням

с awk

awk '{ printf "\"%s\",\n", $0 }' file
5
25.09.2017, 18:24
2 ответа

Для продолжительности, включающей несколько месяцев или лет, которая должна ссылаться на конкретную дату, поскольку разные месяцы или разные годы имеют разную продолжительность.

Чтобы узнать, сколько лет/месяцев/дней осталось до 1327 дней, с помощью dateutils:

$ ddiff -f '%Y years, %m months, %d days' today "$(dadd now 1327)"
3 years, 7 months, 19 days

(вы можете иногда найти ddiffдоступным как datediffили dateutils.ddiff; то же самое дляdadd).

Вот что я получаю сейчас на 2017 -09 -25 (, потому что это с 2017 -09 -25 по 2021 -05 -14 ). Если бы я запустил это в 2018 -03 -01, я бы получил:

3 years, 7 months, 17 days

потому что это с 2018 -03 -01 по 2021 -10 -18.

И в тот 2018 -03 -01 день, 1327 дней назад даст 3 years, 7 months, 16 days.

Дополнительная информация на Как рассчитать и отформатировать продолжительность даты с помощью инструментов GNU, а не дату результата?

10
27.01.2020, 20:33

Я думаю, что это слишком сложно для достаточно точного решения (i. е. относительно странностей календаря, таких как високосные дни )в Баше. Вместо этого попробуйте что-нибудь с библиотекой программирования для календарей, такой как 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)

Конечно, вы можете настроить формат ввода и вывода по своему вкусу, чтобы выбрать разницу во времени на основе других факторов, а не количества дней.

3
27.01.2020, 20:33

Теги

Похожие вопросы