Расчет разницы дат [дубликат]

Это могло быть проще упростить команду, чтобы у вас было меньше специальных символов, которыми оболочка могла бы подавиться:

ssh jboss@myTargetServer 'ps -p $(cat /var/run/jboss-as/jboss-as-standalone8.pid) -o %cpu= 2>/dev/null'

Завершающий 2> / dev / null отбрасывает текст ошибки в том случае, если файл PID либо не может может быть найден или содержит устаревший PID.

3
18.10.2016, 12:14
3 ответа

Вы можете использовать дату (при условии реализации GNU) с подстановкой команд, а чтобы получить разницу между временами, используйте арифметическое расширение:

% Value1='2016-10-13 14:19:23'

% Value2='2016-10-13 18:19:23' 

% echo "$(($(date -d "$Value2" '+%s') - $(date -d "$Value1" '+%s')))"
14400

Результат в секундах.

10
27.01.2020, 21:08

Ответ в часах / минутах / секундах:

date -u -d @$(($(date -d "$Value2" '+%s') - $(date -d "$Value1" '+%s'))) '+%T'

Ответ всего за часы / минуты (как первоначально запрашивалось):

date -u -d @$(($(date -d "$Value2" '+%s') - $(date -d "$Value1" '+%s'))) '+%H:%M'

Выше предполагается, что пользователя интересует только разница в часах и минутах и ​​игнорирует разницу в днях. Ответ все зависит от того, чего вы хотите.

Чтобы справиться с разницей больше или равной одному дню:

Value1='2016-10-13 14:19:23'
Value2='2016-10-18 10:34:58'

D1=$(date -d "$Value1" '+%s'); D2=$(date -d "$Value2" '+%s')
echo "$(((D2-D1)/86400)):$(date -u -d@$((D2-D1)) +%H:%M)"

дает:

4:20:15

И для различных оболочек можно также делать такие вещи, как в Bash:

declare -i Delta=D2-D1
declare -i Days=Delta/86400
echo "$Days:$(date -u -d@$Delta +%H:%M)"
5
27.01.2020, 21:08
$ datediff -f "%H hours and %M minutes" "2016-10-13 14:19:23" "2016-10-13 18:19:23"
4 hours and 0 minutes

datediff - из пакета dateutuils. http://www.fresse.org/dateutils/

Обратите внимание, что в отличие от команды date, dateutils игнорирует настройки локали, по умолчанию используя GMT. Это может привести к разнице в один час при переходе на летнее время.

Сравните:

$ datediff  -f "%H:%M" "2016-10-29 14:00:00" "2016-10-30 14:00:00"
24:0

и

$ datediff --from-zone=Europe/Berlin  -f "%H:%M" "2016-10-29 14:00:00" "2016-10-30 14:00:00"
25:0
4
27.01.2020, 21:08

Теги

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