Я хотел бы создать сценарий, который говорит Вам, сколько секунды, минуты и часы передали начиная с даты (во многом как +%s
date
формат команды). Как я могу вычесть текущую дату с определенной датой? Например: сколько секунды, минуты и часы передали с 4-го июля 1776.
Вот один способ сделать это:
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 это помогает!
Если можно жить с зависимостью, задача изящно выражается с помощью dateutils
:
$ datediff 1776-07-04T00:00:00 now -f '%H:%0M:%0S'
2111284:08:34
Правовая оговорка: Я - автор пакета.