Секунды, минуты и часы начиная с даты

Я хотел бы создать сценарий, который говорит Вам, сколько секунды, минуты и часы передали начиная с даты (во многом как +%s date формат команды). Как я могу вычесть текущую дату с определенной датой? Например: сколько секунды, минуты и часы передали с 4-го июля 1776.

4
задан 26 October 2017 в 09:20

2 ответа

Вот один способ сделать это:

time=$(($(date -d"1776-07-04 00:00:00" +%s) - $(date +%s)))

наборы time переменная можно использовать как так:

echo $time
-7595723059

Эти +%s говорит date форматировать к seconds since 1970-01-01 00:00:00 UTC, который помогает дать нам начальную точку для того, чтобы сделать математику в секундах.

Теперь это может также быть добавлено к сценарию с теми же переменными.

:~$ time=$(($(date -d"1776-07-04 00:00:00" +%s) - $(date +%s)))
:~$ printf '%dh:%dm:%ds\n' $(($time/3600)) $(($time%3600/60)) $(($time%60))
-2109923h:-12m:-55s

, Если бы Вы хотите Years:Days:Hours:Minutes:Seconds с тех пор, это было бы следующим:

printf '%dy:%dd:%dh:%dm:%ds\n' $(($time/60/60/24/365)) $(($time/60/60/24%365)) $(($time/3600%24)) $(($time%3600/60)) $(($time%60))

, Который дал бы Вам вывод как следующее:

:~$ time=$(($(date -d"1776-07-04 00:00:00" +%s) - $(date +%s)))
:~$ printf '%dy:%dd:%dh:%dm:%ds\n' $(($time/60/60/24/365)) $(($time/60/60/24%365)) $(($time/3600%24)) $(($time%3600/60)) $(($time%60))
-242y:-11d:-7h:-46m:-37s

Hope это помогает!

4
ответ дан 1 December 2019 в 09:32

Если можно жить с зависимостью, задача изящно выражается с помощью dateutils:

$ datediff 1776-07-04T00:00:00 now -f '%H:%0M:%0S'
2111284:08:34

Правовая оговорка: Я - автор пакета.

1
ответ дан 1 December 2019 в 09:32

Другие вопросы по тегам:

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