как преобразовать дату 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