Некоторые картинки не загружаются из РФ и РК, используйте VPN.

четверг, 9 февраля 2023 г.

Bash заметки по даты-время

Получить разницу дат в секундах

user@server:~$ old_time=$(date +%s)
user@server:~$ new_time=$(date +%s)
user@server:~$ echo $old_time $new_time
1675929074 1675929084
user@server:~$ date -d @${old_time}
Чт фев  9 10:51:14 MSK 2023
user@server:~$ date -d @${new_time}
Чт фев  9 10:51:24 MSK 2023
user@server:~$ let diff_date=$new_time-$old_time
user@server:~$ echo $diff_date
10

Если разница укладывается в 24 часа, то секунды можно перевести в удобочитаемый вид

user@server:~$  date -u -d @${diff_date} +"%T"
00:00:10

Стоит обратить внимание на параметр -u, который определяет что зона у нас UTC, иначе ответ будет считать плюс текущую зону, т.е. в мое случае +3 часа

user@server:~$ date -d @${diff_date} +"%T"
03:00:10

А вот разницу мы ранее считали без параметра -u, но можно и с.

Если же разница более суток и нужен красивый вывод, то можно представить в следующем варианте

user@server:~$ date -u -d @${diff_date} +"%j day %T"
001 day 00:00:10

Или просто в часах:

user@server:~$ diff_time=15654
user@server:~$ hours=$(echo "scale=0; $diff_time/3600" | bc);
user@server:~$ minute=$(echo "scale=0; ($diff_time-($hours*3600))/60" | bc); 
user@server:~$ sec=$(echo "$diff_time-($hours*3600)-($minute*60)" | bc);
user@server:~$ printf "%s:%0*d:%0*d\n" $hours 2 $minute 2 $sec
4:20:54

Комментариев нет:

Отправить комментарий