2013-05-07 5 views
6

Как конвертировать дату HH: MM: SS в секунду с bash?как конвертировать дату HH: MM: SS в секунду с bash?

Зная, что это дата, которую я восстановил в файле, поэтому я не могу взять ее в другом формате.

У меня есть две переменные $ DateStart и $ DateEnd, и мне бы хотелось, чтобы разница между ними.

ответ

5
date +%s 

возвращает текущий DateTime в секундах с 1970-01-01 00:00:00 UTC

, если вы хотите, чтобы получить заданную DateTime в секундах с 1970-01-01 00:00:00 UTC, например:

kent$ date -d"2008-08-08 20:20:20" +%s 
1218219620 

получить дифф в считанные секунды, вы просто получите две даты в секундах, и сделать s1-s2

+0

Обратите внимание, что если временные метки не содержат дат, то «дата» должна быть поставлена ​​вместе с ними. В противном случае, если пройдут только времена, 'date' будет принимать сегодня, а время, рассчитанное по обе стороны полуночи, будет иметь дополнительную 24-часовую разницу между ними. – spbnick

+1

Спасибо, что работает, я начинаю = $ (date -d "$ DateStart" +% s) и end = $ (date -d "$ DateEnd" +% s) и после time = $ (end-start). – MaxGeneGrim

2

Предполагая, что время в формате ЧЧ: ММ: СС в переменной time_hhmmss и время в секунд необходимо хранить в time_s:

IFS=: read -r h m s <<<"$time_hhmmss" 
time_s=$(((h * 60 + m) * 60 + s)) 
0

Попробуйте использовать мое решение с SED + AWK:

echo $DateStart | sed 's/:\|-/ /g;' | awk '{print $4" "$3" "$2" "$1}' | awk '{print $1+$2*60+$3*3600+$4*86400}' 
echo $DateEnd | sed 's/:\|-/ /g;' | awk '{print $4" "$3" "$2" "$1}' | awk '{print $1+$2*60+$3*3600+$4*86400}' 

она разбивает строку с СЭД, а затем инвертирует число в обратном направлении («DD hh mm ss» -> «ss mm hh DD») и вычисляет их с помощью awk. Она работает даже добавить дни: [[dd-] чч:] мм: сс, например:

 34:56 
    12:34:56 
123-12:34:56 
2

На Mac вы можете преобразовать дату в другую дату с сочетанием -j и -f вариант:

$ date -j -f '%Y-%m-%d %H:%M:%S' "2016-02-22 20:22:14" '+%s' 
1456168934 

Где -j подавляет изменение системных часов, -f <fmt> дает формат, используемый для разбора данной даты, "2016-02-22 20:22:14" - это дата ввода и +<fmt> - это формат вывода.

Смежные вопросы