Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.61/56: Рейтинг темы: голосов - 56, средняя оценка - 4.61
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908

Посчитать разницу во времени

27.09.2016, 06:31. Показов 12137. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Есть простая задача. Необходимо посчитать разницу в секундах между 2 переменными. Они получаются так
Bash
1
2
localtime=$(date +%H.%M)
yourtime=22.33
Учтем тот факт например что текущее время, к примеру уже 23.00, то есть пропустили по каким то причинам.
То есть надо и это посчитать.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.09.2016, 06:31
Ответы с готовыми решениями:

Найти разницу во времени (вычесть из одного времени другое)
Нужно найти разницу во времени: t1 - t2. Просто так объекты типа datetime отниматься не хотят. Нашел...

Не могу посчитать разницу в таблице
Я знаю как посчитать разницу в одном и том же DBGrid. Но, дело в том, что мне нужно вывести это в другой DBGrid. Я сделала вот так,...

Посчитать разницу столбцов DBGrid
Ребят, помогите! как реализовать такую штуку? Я привязал бд к делфи, добавил кнопки заполнения этой таблицы. теперь мне нужно реализовать...

32
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
27.09.2016, 14:10
А что за кривой формат времени?
Цитата Сообщение от info date
time of day may be given as ‘HOUR:MINUTE:SECOND’, where HOUR is a number between 0 and 23, MINUTE is a number between 0 and 59, and SECOND is a number between 0 and 59 possibly followed by ‘.’ or ‘,’ and a fraction containing one or more digits. Alternatively, ‘:SECOND’ can be omitted, in which case it is taken to be zero.
А так перевести в секунды и посчитать.
Bash
1
echo $(((${localtime%.*} - ${yourtime%.*}) * 3600 + (${localtime#*.} - ${yourtime#*.}) * 60))
Хотя правильно делать преобразование через date +%s с учетом того, что можете перескочить и в следующий день (а не только час).
1
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
27.09.2016, 14:21  [ТС]
Marinero, так а я как раз это имел в виду, с перескоком на следующий день, год, месяц.
Не кривой, а порезанный. Надо не все, без секунд только.

Добавлено через 4 минуты
Что то типа будильника или напоминалки.
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
27.09.2016, 14:22
Если
Цитата Сообщение от blackeangel Посмотреть сообщение
с перескоком на следующий день, год, месяц
то Ваши переменные должны хранить дату целиком, а еще лучше сразу в секундах
Цитата Сообщение от Marinero Посмотреть сообщение
через date +%s
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
27.09.2016, 14:32  [ТС]
Marinero, там какие то цифры, что с ними делать?
Юзер задает время когда сработает событие. Надо посчитать сколько секунд до этого времени осталось и спать это время.
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
27.09.2016, 14:39
Цитата Сообщение от blackeangel Посмотреть сообщение
там какие то цифры
Цитата Сообщение от date --help
%s seconds since 1970-01-01 00:00:00 UTC
Стоит научиться работать со справкой и не задавать вопросы расписанные в man <команда>
Цитата Сообщение от blackeangel Посмотреть сообщение
что с ними делать?
Цитата Сообщение от Marinero Посмотреть сообщение
хранить
Цитата Сообщение от blackeangel Посмотреть сообщение
Юзер задает время когда сработает событие. Надо посчитать сколько секунд до этого времени осталось и спать это время
Откройте для себя команду at или (ana)cron
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
27.09.2016, 15:58  [ТС]
Marinero, нет команды at, нет команды crond. Есть только цикл. Итак, как?

Добавлено через 4 минуты
Мало похоже на то что говорите вы.
Code
1
2
3
u0_a72@X5PRO:/ $ date +%s
1474980956
u0_a72@X5PRO:/ $
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
27.09.2016, 16:02
Цитата Сообщение от blackeangel Посмотреть сообщение
Итак, как?
Цитата Сообщение от Marinero Посмотреть сообщение
через date +%s
---------
Цитата Сообщение от blackeangel Посмотреть сообщение
нет команды at
Bash
1
sudo apt install at
Цитата Сообщение от blackeangel Посмотреть сообщение
нет команды crond
Её и не надо, пользуйте crontab
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
27.09.2016, 16:12  [ТС]
Marinero, итак, вернемся к пересчета времени.
data +%s выдает не читабельное число без разделителей и прочего.
Сообщение назад это видно.

Добавлено через 3 минуты
Так бы сразу и сказали что это в секундах дата.
Осталось перевести заданное юзером дату в секунды и как то сравнить.
Как это делать будем?
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
27.09.2016, 16:18
Цитата Сообщение от blackeangel Посмотреть сообщение
выдает не читабельное число
Вам не надо его «читать», его «читает» машина и рассчитыает разницу.

Добавлено через 5 минут
Цитата Сообщение от blackeangel Посмотреть сообщение
Так бы сразу и сказали что это в секундах дата
Цитата Сообщение от Marinero Посмотреть сообщение
Цитата Сообщение от date --help
%s seconds since 1970-01-01 00:00:00 UTC
Цитата Сообщение от blackeangel Посмотреть сообщение
перевести заданное юзером дату в секунды
Цитата Сообщение от Marinero Посмотреть сообщение
через date +%s

Не по теме:

Меня уже поддостало цитировать эту фразу…

0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
27.09.2016, 16:52  [ТС]
Marinero, хорошо, покажите пример, как будет выглядеть 13.04.18.14.15 через data +%s ?
0
74 / 74 / 17
Регистрация: 06.05.2016
Сообщений: 413
27.09.2016, 18:56
Цитата Сообщение от blackeangel Посмотреть сообщение
Marinero, хорошо, покажите пример, как будет выглядеть 13.04.18.14.15 через data +%s ?
Можно, я отвечу?
Вы совсем уж совесть потеряли. Пытаетесь заставить работать
знающего специалиста в качестве минигугла.
Гугол дает ответ на ваш вопрос в течении 0.40 секунд.
Спросите его: "linux Как преобразовать секунды в дату и обратно"
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
27.09.2016, 19:18
Я уже писал про самопальные форматы
Bash
1
2
IFS=\. read Y M D h m <<<"13.04.18.14.15"
yourtime=$(date +%s -d "$Y-$M-$D $h:$m")
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
30.09.2016, 22:02  [ТС]
Marinero, ну как бы не быть голословным вот вам из терминала
Code
1
2
3
date: bad date '30-09-16 22:00'                                  timer.sh[10]: -: not found
timer.sh[12]: sleep: syntax error
1|root@X5PRO:/storage/emulated/0 #
Содержимое такое
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/system/bin/sh
clear
IFS=\. read Y M D h m <<<"30.09.16.22.00"
yourtime=$(date +%s -d "$Y-$M-$D $h:$m")
#yourtime=$(date  -d "Sep 30 23:00" +%s)
echo $yourtime
#while [ "1" -gt "0" ]
#do
localtime=$(date +%s)
sleeptime=$($yourtime - $localtime)
 
sleep $sleeptime
#if [ $localtime = $yourtime ]
#then
#echo "GooD"
#am start -n com.android.settings/.Settings
#else
#echo "noGooD"
#fi
#done
Добавлено через 3 минуты
kalsarikannit, к вам это тоже относится, ибо гугл не дает конкретного решения о переводе из нормальной даты заданой юзером в unix секунды. Как бы гуглом пользоваться умею и поэтому создал тему. Если же вы считаете обратное, то ткните носом в ссылку.

Добавлено через 5 минут
Вот что справка говорит
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
root@X5PRO:/storage/emulated/0 # date -d                         usage: date [-u] [-r FILE] [-d DATE] [+DISPLAY_FORMAT] [-s SET_FORMAT] [SET]
 
Set/get the current date/time. With no SET shows the current date.
 
Default SET format is "MMDDhhmm[[CC]YY][.ss]", that's (2 digits each)
month, day, hour (0-23), and minute. Optionally century, year, and second.
 
-d      Show DATE instead of current time (convert date format)
-r      Use modification time of FILE instead of current date
-s      +FORMAT for SET or -d (instead of MMDDhhmm[[CC]YY][.ss])
-u      Use UTC instead of current timezone
 
+FORMAT specifies display format string using these escapes:
 
%% literal %             %n newline              %t tab
%S seconds (00-60)       %M minute (00-59)       %m month (01-12)%H hour (0-23)           %I hour (01-12)         %p AM/PM
%y short year (00-99)    %Y year                 %C century
%a short weekday name    %A weekday name         %u day of week (1-7, 1=mon)
%b short month name      %B month name           %Z timezone name%j day of year (001-366) %d day of month (01-31) %e day of month ( 1-31)
 
%U Week of year (0-53 start sunday)   %W Week of year (0-53 start monday)
%V Week of year (1-53 start monday, week < 4 days not part of this year)
 
%D = "%m/%d/%y"    %r = "%I : %M : %S %p"   %T = "%H:%M:%S"   %h = "%b"
%x locale date     %X locale time           %c locale date/time
 
date: Missing argument to -d
0
74 / 74 / 17
Регистрация: 06.05.2016
Сообщений: 413
01.10.2016, 02:32
Цитата Сообщение от blackeangel Посмотреть сообщение
kalsarikannit, к вам это тоже относится, ибо гугл не дает конкретного решения о переводе из нормальной даты заданой юзером в unix секунды. Как бы гуглом пользоваться умею и поэтому создал тему. Если же вы считаете обратное, то ткните носом в ссылку.
Источник:
https://ru.wikipedia.org/wiki/Date
Цитата:
Единственный ключ, который определён по стандарту Single Unix Specification — -u[1]; остальные могут различаться в разных операционных системах.
Итого:
если вы используете формат даты, отличный от utc, то велик
шанс уверовать, что кругом одни враги.
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
01.10.2016, 13:17
blackeangel, Вы специально такие вопросы задаёте? Я ведь так понимаю что Вы и сами пытаетесь код писать или хотя бы учитесь? Изобретаете какие-то кривые форматы, а потом сами же и налетаете на «подстеленные грабли». Пишите, и сами не понимаете что?
Цитата Сообщение от blackeangel Посмотреть сообщение
Default SET format is "MMDDhhmm[[CC]YY][.ss]", that's (2 digits each)
month, day, hour (0-23), and minute. Optionally century, year, and second.
Порядок данных ни о чем не говорит? Или в моем коде
Цитата Сообщение от Marinero Посмотреть сообщение
read Y(ear) M(onth) D(ay) h m
На худой конец, если Вы выкрутили формат по умолчанию в какую-то хрень, так приведите код в соответсвие своей фантазии. Или кто-то другой должен догадаться о направлении движения тараканов в Вашей голове?

Добавлено через 5 минут
Bash
10
sleeptime=$((yourtime - localtime))
1
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
01.10.2016, 14:28  [ТС]
Marinero, хорошо все равно вот
Code
1
2
3
date: bad date 'Sat Oct 1 23:00:00 MSK 2016'
 
timer.sh[14]: sleep: syntax error: Invalid argument '-1475319532'1|u0_a72@X5PRO:/sdcard $
При использовании
Bash
1
yourtime=$(date +%s -d "Sat Oct 1 23:00:00 MSK 2016" )
Или как надо задавать? Цифрами?с пробелами или без?
В какой последовательности это я видел, а вот какими символами, так и не понял.
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
01.10.2016, 16:31
Я понял, доходит раза с 3-4?
Цитата Сообщение от Marinero Посмотреть сообщение
Default SET format is "MMDDhhmm[[CC]YY][.ss]", that's (2 digits each)
month, day, hour (0-23), and minute. Optionally century, year, and second
Т.е. по стандарту Sat Oct 1 23:00:00 MSK 2016 для распознавания date должно быть таким 10012300. Некоторые версии понимают и другие форматы
А потом Вы напишите
Цитата Сообщение от blackeangel Посмотреть сообщение
Так бы сразу и сказали что это
Цитата Сообщение от info date
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
     1972-09-24     # ISO 8601.
     72-9-24        # Assume 19xx for 69 through 99,
                    # 20xx for 00 through 68.
     72-09-24       # Leading zeros are ignored.
     9/24/72        # Common U.S. writing.
     24 September 1972
     24 Sept 72     # September has a special abbreviation.
     24 Sep 72      # Three-letter abbreviations always allowed.
     Sep 24, 1972
     24-sep-72
     24sep72
 
   The year can also be omitted.  In this case, the last specified year
is used, or the current year if none.  For example:
 
     9/24
     sep 24
 
   Here are the rules.
 
   For numeric months, the ISO 8601 format ‘YEAR-MONTH-DAY’ is allowed,
where YEAR is any positive number, MONTH is a number between 01 and 12,
and DAY is a number between 01 and 31.  A leading zero must be present
if a number is less than ten.  If YEAR is 68 or smaller, then 2000 is
added to it; otherwise, if YEAR is less than 100, then 1900 is added to
it.  The construct ‘MONTH/DAY/YEAR’, popular in the United States, is
accepted.  Also ‘MONTH/DAY’, omitting the year.
   Literal months may be spelled out in full: ‘January’, ‘February’,
‘March’, ‘April’, ‘May’, ‘June’, ‘July’, ‘August’, ‘September’,
‘October’, ‘November’ or ‘December’.  Literal months may be abbreviated
to their first three letters, possibly followed by an abbreviating dot.
It is also permitted to write ‘Sept’ instead of ‘September’.
 
   When months are written literally, the calendar date may be given as
any of the following:
 
     DAY MONTH YEAR
     DAY MONTH
     MONTH DAY YEAR
     DAY-MONTH-YEAR
 
   Or, omitting the year:
 
     MONTH DAY
В той версии date, help которой Вы привели, существует опция -s, позволяющая самостоятельно задать любой формат
Code
1
date +%s -s '+%a %b %e %H:%M:%S %Z %Y' -d "Sat Oct 1 23:00:00 MSK 2016"
1
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
01.10.2016, 22:36  [ТС]
Marinero, в общем мучения продолжаются
Code
1
2
3
4
5
571907168
147534923      
timer.sh[14]: sleeptime: not found                               
-903442062                                                       
timer.sh[15]: sleep: syntax error: Invalid argument '-903442062'
При
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/system/bin/sh
clear
yourtime=$(date +%s  -d "10012300" )
echo $yourtime
#while [ "1" -gt "0" ]
#do
lom="-1"
localtime=$(date +%s)
echo $localtime
sleeptime=$((yourtime - localtime))
if [ "$sleeptime" -lt "0" ]; then
sleeptime = $((lom * sleeptime))
echo $sleeptime
fi
sleep $sleeptime
#am start -n com.android.settings/.Settings
#done
Отрицательная разница? Это как то не правильно, должна быть положительная.
И заодно поведайте как сделать число положительным? Умножением на -1 не прокатило. В квадрат возвести тоже.
Ну или поведайте как работать с отрицательными числами?
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
01.10.2016, 23:00
Значит Вы не тот help привели. Попробуйте мой код.
Code
1
date +%s -d "161001 2300"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.10.2016, 23:00
Помогаю со студенческими работами здесь

Как посчитать разницу дат
Здравствуйте как посчитать разницу между двумя введенными датами и так что бы это отображалось в другом поле( п.с. куда надо поставить...

Найти разницу во времени
Найти разницу во времени когда в одной строке задано T1, T2 в формате hh:mm:ss (12:47:06). И разницу вивести в таком же формате.

Расчитать разницу во времени
Подскажите пожалуйста. Считает если время одного дня. Если пишу время1 23.59.59 время2 01.01.01 считает уже неправильно. Вот мой код....

Узнать разницу времени
Можно ли в с# получить системное время в формате int? Мне нужно получить системное время вначале и в конце работы программы что бы узнать...

Вычесть разницу во времени
Всем привет, столкнулся с небольшой проблемой. На голом PHP при цикле я нормально сравниваю время и оно работает нормально. Но вот чуть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru