#bash
#bash
Вопрос:
В настоящее время у меня есть переменные ниже, и я хочу знать, сколько времени прошло в секундах. Итак, CURRENT_TIME — TEST_START
TEST_START=$(date ' %d/%m/%Y %H:%M:%S')
sleep 4
CURRENT_TIME=$(date ' %d/%m/%Y %H:%M:%S')
Я пробовал ниже, но продолжаю получать незаконные действия
START_IN_SECONDS=$(date --date "$(TEST_START)" %s)
Это в Mac.
Комментарии:
1. Использовать
${variable}
не$(variable)
2.
$(...)
предназначен для выполнения подстановки команд, например, при назначении наTEST_START
.3. я тоже это пробовал
4. Почему вы не можете просто использовать временные метки вместо строк даты? Или, по крайней мере, используйте формат строки даты std.
Ответ №1:
Во-первых, синтаксис для расширения переменных — это $variable
or ${variable}
, not $(variable)
.
Во-вторых, date
не знает, как анализировать даты в %d/%m/%Y
формате. Когда в дате используются косые черты, ожидается, что это будет %m/%d/%Y
. Поэтому измените первые две строки, чтобы использовать правильный формат.
TEST_START=$(date ' %m/%d/%Y %H:%M:%S')
sleep 4
CURRENT_TIME=$(date ' %m/%d/%Y %H:%M:%S')
START_IN_SECONDS=$(date --date "$TEST_START" %s)
CURRENT_IN_SECONDS=$(date --date "$CURRENT_TIME" %s)
diff=$((CURRENT_IN_SECONDS - START_IN_SECONDS))
echo $diff
Конечно, вы могли бы просто установить xxx_IN_SECONDS
переменные напрямую с помощью %s
вместо разбора форматированных дат:
START_IN_SECONDS=$(date %s)
sleep 4
CURRENT_IN_SECONDS=$(date %s)
Комментарии:
1. Я получаю «дата: недопустимая опция — -«, я думаю, это может быть потому, что я на Mac
2. На Mac установлен BSD
date
, вы пытаетесь использовать синтаксис GNUdate
.3. В BSD date нет гибкого анализатора дат. Используйте
man date
, чтобы увидеть его синтаксис.
Ответ №2:
#!/bin/bash
# Time Arithmetic
TIME1=05:36:11
TIME2=06:46:00
# Convert the times to seconds from the Epoch
SEC1=`date %s -d ${TIME1}`
SEC2=`date %s -d ${TIME2}`
# Use expr to do the math, let's say TIME1 was the start and TIME2 was the finish
DIFFSEC=`expr ${SEC2} - ${SEC1}`
echo Start ${TIME1}
echo Finish ${TIME2}
echo Took ${DIFFSEC} seconds.
# And use date to convert the seconds back to something more meaningful
echo Took `date %H:%M:%S -ud @${DIFFSEC}`
Вывод:
Start 05:36:11
Finish 06:46:00
Took 4189 seconds.
Took 01:09:49
Комментарии:
1. Я скопировал и вставил это, и это не работает. Я получаю «дата: недопустимый формат времени».
2. Я думаю, что это может быть проблемой, потому что я использую Mac