Необходимо получить разницу между двумя моментами в секундах

Следующие две переменные содержат время начала и время окончания, необходимо получить разницу между этими двумя моментами в секундах

start_time=06:07:25 end_time=07:02:08 

Желаемый результат

 diff_time= 3283 Seconds 

Я использую машину AIX 6.1 с ksh88.

  • Специальный символ AWK
  • объединение имен файлов в переменную
  • Я хочу разделить сумму чисел на значение
  • Как найти все шестнадцатеричные числа между двумя номерами
  • Значение переменной \ перед средой
  • получить переданные аргументы и поместить их в массив
  • Использование вывода команды в printf в ksh
  • Как найти старые каталоги в локальном каталоге, используя find в AIX?
  • 2 Solutions collect form web for “Необходимо получить разницу между двумя моментами в секундах”

    используя bash:

     t2s() { local T=$1;shift echo $((10#${T:0:2} * 3600 + 10#${T:3:2} * 60 + 10#${T:6:2})) } start_time=06:07:25 end_time=07:02:08 diff_time=$(( $(t2s $end_time) - $(t2s $start_time) )) 

    Если вы уверены, что end_time всегда больше, чем start_time , вы можете использовать Perl так:

     export start_time=06:07:25 export end_time=07:02:08 perl -e ' ($h1,$m1,$s1) = split /:/,$ENV{start_time}; ($h2,$m2,$s2) = split /:/,$ENV{end_time}; $delta_h = $h2 - $h1; $delta_m = $m2 - $m1; if( $delta_m < 0 ) { $delta_m = $delta_h-- * 60 + $m2 - $m1; } $delta_s = $s2 - $s1; if( $delta_s < 0 ) { $delta_s = $delta_m-- * 60 + $s2 - $s1; } print "diff_time=", $delta_h * 3600 + $delta_m * 60 + $delta_s, " seconds\n" ' 

    Обратите внимание, что вы можете сделать это чисто в {k,}sh с расширением параметра и арифметикой оболочки. Я просто использую Perl для удобства.

    Здесь он находится в скрипте оболочки POSIX:

     start_time=06:07:25 end_time=07:02:08 h1=${start_time%%:*} start_time=${start_time#*:} m1=${start_time%%:*} s1=${start_time#*:} h2=${end_time%%:*} end=${end#*:} m2=${end_time%%:*} s2=${end_time#*:} delta_h=$(( h2 - h1 )) delta_m=$(( m2 - m1 )) if [ $delta_h -lt 0 ];then delta_m=$(( delta_h * 60 + m2 -m1 )) delta_h=$(( delta_h - 1 )) fi delta_s=$(( s2 - s1 )) if [ $delta_s -lt 0 ];then delta_s=$(( delta_m * 60 + s2 - s1 )) delta_m=$(( delta_m - 1 )) fi delta_all=$(( delta_h * 3600 + delta_m * 60 + delta_s )) printf "diff_time = %d seconds\n" $delta_all 
    Interesting Posts

    Проблема с apt-get и locales (недопустимое # в имени пакета .deb)

    Почему бы не символическая ссылка на символическую ссылку?

    Как определить, действительно ли я нахожусь в символической ссылке из командной строки?

    Статическая настройка DNS на клиенте общего интернет-соединения

    Изменение пользователя maildir в пользовательское местоположение при создании пользователя

    Страницы не блокируются Squid через HTTPS

    Как скопировать контекст SELinux из одного каталога и применить его к другому каталогу?

    Расширение параметра Bash – жадное и неживое

    Концепция управления терминалом в Unix

    Python в базе кода GNOME

    Получение часовых поясов в странах

    Может ли iptables отфильтровывать UNREPLIED соединения?

    Откройте Java-программы Linux-машины на Windows с SSH?

    Есть ли способ узнать, прослушивает ли процесс прослушивание через порт TCP сообщение?

    Как grep, затем искать и заменять на выходе?

    Linux и Unix - лучшая ОС в мире.