как преобразовать дату HH: MM: SS в секунду с bash?

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

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

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

4 ответов


date +%s

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

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

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

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


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

$ 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> выходной формат.


предполагая, что время в формате HH:MM:SS находится в переменной time_hhmmss и в секунды должны храниться в time_s:

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

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

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

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

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