Форум
Написать нам
  • Страница 1 из 1
  • 1
Модератор форума: as-master  
Правильное время по кругу
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)
отладчиком я постоянно пользуюсь

Только в него не смотрю :D В отладчике это всё светица, можно наглядно было увидеть, где лажа ))


Жизнь оказалась не такой уж и забавной, как поначалу...
 
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
Ну вот) А я тут распинался)

 
  • Страница 1 из 1
  • 1
Поиск: