Правильное время по кругу
|
|
EagleSH | Дата: Пятница, 17 Июля 2009, 23:36 | Сообщение # 1 |
Поднаторевший
Группа: Проверенные
Сообщений: 106
Репутация: 0
Награды: 0
Статус: Offline
| задача: есть точка времени (больше системного) и есть системное время. к примеру системное время 18:00, точка времени 22:00, нужно вычислить разницу в минутах между ними. до 23:59 у меня всё правильно работает, но дальше идёт минус в разнице. Code hour$='22' min$='00' orderedtime=VAL(hour$)*60+VAL(min$) currenttime$=CBK_Time24 hour$=StrCopy(currenttime$, 1,2 ) min$=StrCopy(currenttime$,4,5) currenttime=VAL(hour$)*60+VAL(min$) timeleft=orderedtime-currenttime подскажите как правильно реализовать.
Сообщение отредактировал EagleSH - Пятница, 17 Июля 2009, 23:39 |
|
| |
toizy | Дата: Суббота, 18 Июля 2009, 00:02 | Сообщение # 2 |
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
| Так разницу надо в пределах суток считать? ...как всегда, ты с крутыми алго Добавлено (17 Июль 2009, 23:55) --------------------------------------------- Ну так правильно, как это может работать, если у тебя данные неверные... проверь значение min$ вот тут min$=StrCopy(currenttime$,4,5) Добавлено (18 Июль 2009, 00:02) --------------------------------------------- min$=StrCopy(currenttime$,4,5) в переводе на русский min$ равно СкопироватьСтроку currenttime$ с4символа вКоличестве5символов В ветке о НеоБук уже писали про пользу отладчика и Message, можешь уже начинать использовать
Жизнь оказалась не такой уж и забавной, как поначалу...
|
|
| |
moneycan | Дата: Суббота, 18 Июля 2009, 00:35 | Сообщение # 3 |
Новый участник
Группа: Пользователи
Сообщений: 24
Репутация: 0
Награды: 0
Статус: Offline
| Как я понял, проблема вообще в другом.. Если точка в 02:00, а системное время, например, 23:00.. так вот, он из 02:00 вычитает 23:00 и получает -21:00.. решение!!!!!! начни учитывать сутки (если нужно, даже месяц и год), тогда у тебя все ништяк будет! Quote min$ равно СкопироватьСтроку currenttime$ с4символа вКоличестве5символов Ошибка то ошибка, только роли она не играет.. у него получается min$='00 ' - 3 пробела, которые удалятся под функцией VAL.
Сообщение отредактировал moneycan - Суббота, 18 Июля 2009, 00:40 |
|
| |
EagleSH | Дата: Суббота, 18 Июля 2009, 09:36 | Сообщение # 4 |
Поднаторевший
Группа: Проверенные
Сообщений: 106
Репутация: 0
Награды: 0
Статус: Offline
| toizy, отладчиком я постоянно пользуюсь + мессейдж не представляю ммб без отладчика.... но решение ещё чёт не нашёл по сабжу.
|
|
| |
toizy | Дата: Суббота, 18 Июля 2009, 09:49 | Сообщение # 5 |
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
| Решение в изменении алгоритма или использовании ABS, никакие сутки учитывать не надо. Quote (moneycan) Ошибка то ошибка, только роли она не играет.. у него получается min$='00 ' - 3 пробела, которые удалятся под функцией VAL. Скложилось впечатление, что ты писатель, а не читатель. Ты ВООБЩЕ запускал его код? А я не поленился. в min$ сожержится группа '00:00', т.к. формат CBK_Time24 содержит ещё и секунды. Именно поэтому в коде фатальная алгоритмическая ошибка Рекомендую прежде, чем отвечать на нашем форуме, тестировать приведённый неработающий код. Добавлено (18 Июль 2009, 09:42) ---------------------------------------------
Quote (EagleSH) но решение ещё чёт не нашёл по сабжу. Для решения сначала устрани ошибку, на которую я указал. Ты неправилно используешь одну функцию. Как исправишь, пойдём дальше Добавлено (18 Июль 2009, 09:49) ---------------------------------------------
Quote (EagleSH) отладчиком я постоянно пользуюсь Только в него не смотрю В отладчике это всё светица, можно наглядно было увидеть, где лажа ))
Жизнь оказалась не такой уж и забавной, как поначалу...
|
|
| |
moneycan | Дата: Суббота, 18 Июля 2009, 10:26 | Сообщение # 6 |
Новый участник
Группа: Пользователи
Сообщений: 24
Репутация: 0
Награды: 0
Статус: Offline
| Quote (toizy) Ты ВООБЩЕ запускал его код? Неа.. Сейчас обьясню почему.. Quote (EagleSH) до 23:59 у меня всё правильно работает, но дальше идёт минус в разнице. Опыт в арифметике позволил сразу понять в чем дело:) Quote (EagleSH) до 23:59 у меня всё правильно работает Вот почему мне показалось, что ошибка не значительна. Там есть еще секунды? Забыл, извиняюсь:) ну с кем не бывает.
|
|
| |
EagleSH | Дата: Суббота, 18 Июля 2009, 10:26 | Сообщение # 7 |
Поднаторевший
Группа: Проверенные
Сообщений: 106
Репутация: 0
Награды: 0
Статус: Offline
| toizy, да я видел, но на работу моего кода вцелом оно не влияет, т.к. VAL отбрасывает всё от 1-го найденного числа... но спасибо, уже исправил просто 2 символа везде посатвил, где у меня ошибка такая. ABS тоже думал использовать, поставил, всё равно не правильно он считает при переходе в другой день, видать нужно доработать больше, а не тупо ABS поставить
Сообщение отредактировал EagleSH - Суббота, 18 Июля 2009, 10:41 |
|
| |
moneycan | Дата: Суббота, 18 Июля 2009, 11:05 | Сообщение # 8 |
Новый участник
Группа: Пользователи
Сообщений: 24
Репутация: 0
Награды: 0
Статус: Offline
| Учитывай сутки!!! смотри у тебя так.. час*60+мин=время_в_минутах, а ты так сделай сутки*24*60+час*60+мин=время_в_минутах.. тогда проблема частично решится! Чтобы ее совсем решить добавь еще месяц и год.. только с месяц и годом проблемка будет.. месяца разные по длинне, а года весокосные бываюст.. если будешь их использовать, используй массивы Code end_of_febr=year-INT(year/4)*4 end_of_febr=end_of_febr/end_of_febr mes[1]=0 mes[2]=31 mes[3]=28+mes[2]+end_of_febr mes[4]=31+mes[3] mes[5]=30+mes[4] mes[6]=31+mes[5] mes[7]=30+mes[8] mes[8]=31+mes[7] mes[9]=31+mes[8] mes[10]=30+mes[9] mes[11]=31+mes[10] mes[12]=30+mes[11] так можешь высчитывать месяц в минутах Code mes[номер_месяца]*24*60 Это позволит безошибочно высчитывать время в минутах от системного времени до точки, которая может находить в любой момент "системного года".. Чтобы можно было выходить запредел года, например, системное время у тебя 31.12.2009 22:00, а точка 01.01.2010 03:00, нужно описать год.. Над годом сейчас подумаю еще.. Добавлено (18 Июль 2009, 10:36) --------------------------------------------- Quote (toizy) А я не поленился. в min$ сожержится группа '00:00', т.к. формат CBK_Time24 содержит ещё и секунды. Именно поэтому в коде фатальная алгоритмическая ошибка toizy, я не поленился и написал тебе наглядный код:) попробуй его прочитать, а потом запустить.. Code min$='08:58' min=VAL(min$) Message("","min") Это именно то о чем и говорил, только там не 3 пробела, а ':00', что тоже обрезается функцией VAL Рекомендую прежде, чем отвечать на вашем форуме, тестировать приведённый РАБОТАЮЩИЙ код.
Сообщение отредактировал moneycan - Суббота, 18 Июля 2009, 11:24 |
|
| |
EagleSH | Дата: Суббота, 18 Июля 2009, 11:35 | Сообщение # 9 |
Поднаторевший
Группа: Проверенные
Сообщений: 106
Репутация: 0
Награды: 0
Статус: Offline
| moneycan, спасибо конечно, но шото ты далеко пошёл, ну очень далеко... мне месяцы, годы не нужны, мне нужно просто делать переход на следующий день. но вот разницу в минутах до любой точки относительно системного времени, даже на другой год - это интересно всётаки, подумай и напиши код, малоли... по сабжу сделал, путём добавления всего пары строк в код: Code If (orderedtime<currenttime) Then timeleft=24*60-currenttime+orderedtime Else timeleft=orderedtime-currenttime End
Сообщение отредактировал EagleSH - Суббота, 18 Июля 2009, 11:44 |
|
| |
moneycan | Дата: Суббота, 18 Июля 2009, 11:48 | Сообщение # 10 |
Новый участник
Группа: Пользователи
Сообщений: 24
Репутация: 0
Награды: 0
Статус: Offline
| В таком случае.. это да:) если получаешь разницу меньше нуля, то просто прибавляешь к ней 24 часа.. но это только с учетом того что точка дальше чем на сутки от системного времени не уходит. Ты будильник делаешь?:))))
|
|
| |
EagleSH | Дата: Суббота, 18 Июля 2009, 11:51 | Сообщение # 11 |
Поднаторевший
Группа: Проверенные
Сообщений: 106
Репутация: 0
Награды: 0
Статус: Offline
| moneycan, да нет, не будильник, куму программу для его такси.
Сообщение отредактировал EagleSH - Суббота, 18 Июля 2009, 11:52 |
|
| |
moneycan | Дата: Суббота, 18 Июля 2009, 12:11 | Сообщение # 12 |
Новый участник
Группа: Пользователи
Сообщений: 24
Репутация: 0
Награды: 0
Статус: Offline
| Ну вот) А я тут распинался)
|
|
| |