2013-11-11 8 views
1

У меня есть 2 переменные.Разница во времени даты

GMDCOMTM which stores the date time Tue Oct 1 13:32:40 2013 
GMDRRSTM which stores the date time Tue Oct 2 23:35:33 2013 

Как рассчитать разницу между 2-х переменных в формате чч: мм: сс и хранить его в 3-й переменной.? Я не хочу использовать AWK, SED или PERL. Я хочу использовать простой скрипт оболочки , чтобы сделать это.

ответ

0

Конвертировать даты в %s ---> seconds since 1970-01-01 00:00:00 UTC.

$ date -d"Tue Oct 2 23:35:33 2013" "+%s" 
1380749733 

Так дело в том, чтобы получить разницу в секундах между двумя датами, используя bc в качестве калькулятора:

$ d1="Tue Oct 1 13:32:40 2013" 
$ d2="Tue Oct 2 23:35:33 2013" 
$ echo $(date -d"$d2" "+%s") - $(date -d"$d1" "+%s") | bc 
122573 

Тогда вы можете получить его в часы, дни, с great function Stéphane Gimenez indicates in UNIX & Linux:

$ displaytime 122573 
1 days 10 hours 2 minutes and 53 seconds 
0
C=$(date -d "Tue Oct 1 13:32:40 2013" +%s) 
R=$(date -d "Tue Oct 2 23:35:33 2013" +%s) 
T=$(date [email protected]$((R-C)) +%H:%M:%S) 
+1

Примечание: дата больше одного дня, поэтому вам нужно добавить дополнительные поля в свой формат даты, чтобы показать их. Кроме того, это действительно хороший и короткий ответ. – fedorqui

0

Я использую специально выполненную функцию для выполнения вычислений. Это может быть долгий путь, но он определенно будет работать на всех системах на базе UNIX и Linux. После блока кода.

time_diff(){ 
    foodate1=$1 
    foodate2=$2 
    foosecvall=`echo $foodate1 | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3 }'` 
    foosecval2=`echo $foodate2 | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3 }'` 
    foodiffsec=$((foosecvall-foosecval2)); 

    s=$foodiffsec 
    h=$((s/3600)); 
    s=$((s-$((h*3600)))); 
    m=$((s/60)); 
    s=$((s-$((m*60)))); 
    footmstm=$h":"$m":"$s 
} 

Поместите вышеуказанный код в свой скрипт, а затем вызовите функцию, как показано ниже.

TIME1="10:12:14" 
TIME2="12:15:14" 

time_diff $TIME2 $TIME1 

echo $footmstm 
Смежные вопросы