Вычитание даты и времени в формате yyyymmddhhmmss [закрыто]

-2
04.08.2017, 12:36
2 ответа

Сначала вам нужно преобразовать даты в формат unix time _t (т.е. секунды с "эпохи", 1970 -01 -01 00 :00 :00 ). Затем вы можете вычислить разницу с помощью простого вычитания.

Имеющиеся у вас даты не распознаются программой dateв их текущем формате. Он ожидает что-то похожее больше на дату с дефисами и двоеточиями, разделяющими поля, чем на число.

Вот пример, который использует sedв функции для «фиксации» дат -, т.е. конвертирует их в формат, понятный date, а затем использует dateдля преобразования во время _t секунд, затем выполните вычитание:

#!/bin/bash

a=20170804020000
b=20170804015959

function fixdate() {
  printf "$1" | sed -E -e 's/(....)(..)(..)(..)(..)(..)/\1-\2-\3 \4:\5:\6/'
}

a_seconds="$(date -d "$(fixdate "$a")" '+%s')"
b_seconds="$(date -d "$(fixdate "$b")" '+%s')"
seconds=$((a_seconds - b_seconds))

echo "$seconds"
4
28.01.2020, 05:14

Это некрасиво, но у меня это работало в Centos:

a=20170804020000

b=20170804015959

ayear=${a:0:4}
amonth=${a:4:2}
aday=${a:6:2}
ahour=${a:8:2}
amin=${a:10:2}
asec=${a:12:2}

byear=${b:0:4}
bmonth=${b:4:2}
bday=${b:6:2}
bhour=${b:8:2}
bmin=${b:10:2}
bsec=${b:12:2}

adate=$(date -d "$amonth/$aday/$ayear $ahour:$amin:$asec" +"%s")
bdate=$(date -d "$bmonth/$bday/$byear $bhour:$bmin:$bsec" +"%s")
datediff=$((adate-bdate))
1
28.01.2020, 05:14

Теги

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