powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Помогите с пересечение интервала времени
14 сообщений из 14, страница 1 из 1
Помогите с пересечение интервала времени
    #36338071
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже назревает идея как сделать пересечение временных интервалов. Но интересно увидеть еще вариант (возможно через timer, я не знаю как времья преобразовать в число как показывает ф-ция timer)

Задача. Работает автономно видеоплеер (показывет все ролики), потом передает управление презентации (тоже все файлы), дальше играют два плеера по очереди и показывается реклама. Но хочу еще реализовать в два периода просто диско режим (когда играют просто плееры и не передается управление по кругу до тех пор пока не настанет тот час). Детали: 1) с 13:00 по 14:00 - не впрос сделать; 2) с 23:00 по 01:00 - уже затрудняюсь. Скажем так задача в том чтоб переменная например dim Zm_DiskoReg as boolean равнялась true если пересечен интервал времени.

Короче до полуночи работает вот эта схема
Код: plaintext
1.
2.
3.
4.
  GOL_RegDisko1_z = Date + GOL_RegDisko1_z
  GOL_RegDisko1_po = DateAdd("d",  1 , Date) + GOL_RegDisko1_po
  If GOL_RegDisko1_z >= Now() And GOL_RegDisko1_po <= Now() Then
    MsgBox "Правильно"
  End If

но тут дело даже не во времени до или после 0:00. Период "с" может быть больше чем "по", пример с 22:00 по 6:00. Сейчас 2:00 или 23:00 - должно работать, 7:00 - не должно. Чуть запутался ( или отбросить все функции к черту, перевести часы и минуты в числа и быстрее будет сверить или как...
...
Рейтинг: 0 / 0
Помогите с пересечение интервала времени
    #36338074
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и так попробую решить вот таким путем, но интересно еще увидеть интересные варианты.
1. выбираю функцией t_s1_h=val(left(vrema1,2)) i минуты t_s1_m=val(mid(vrema1,4,2)); t_s2_h=val(left(vrema2,2)) i минуты t_s2_m=val(mid(vrema2,4,2))
2. если t_s1_h>t_s2_h тогда t_s1_h=t_s1_h+24
3. проганяю по условию (если долго мучиться - что-небудь получиться)
...
Рейтинг: 0 / 0
Помогите с пересечение интервала времени
    #36338085
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И так я сделал своим методом, сначало какой-то велосипед делал, потом условие сократил, потестил все возможные варианты (секунды не в счет) и ГОТОВО!
Сделал его глобальной функцией. Пригодится :)

Код: plaintext
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.
Public Function OnIntervalTimer(Time1 As Date, Time2 As Date) As Boolean
  Dim h1 As Long: Dim m1 As Long: Dim hz As Long
  Dim h2 As Long: Dim m2 As Long: Dim mz As Long

  h1 = hour(Time1):     h2 = hour(Time2):     hz = hour(time)
  m1 = Minute(Time1):   m2 = Minute(Time2):   mz = Minute(time)
  
  If h1 > h2 Then h2 = h2 +  24 : If hz < h1 Then hz = hz +  24 
  
  If h1 = h2 Then
   If hz = h1 And mz >= m1 And mz <= m2 Then
     OnIntervalTimer = True
   End If
  Else
   If hz >= h1 And hz <= h2 Then
     If hz = h2 Then
       If mz <= m2 Then OnIntervalTimer = True
       Exit Function
     End If
     If hz = h1 Then
       If mz >= m1 Then OnIntervalTimer = True
       Exit Function
     End If
     OnIntervalTimer = True
   End If
  End If
End Function
...
Рейтинг: 0 / 0
Помогите с пересечение интервала времени
    #36338126
.Михаил.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159,
глянь сюда
http://www.sql.ru/forum/actualthread.aspx?tid=709877
будут вопросы задавай
...
Рейтинг: 0 / 0
Помогите с пересечение интервала времени
    #36338127
.Михаил.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159,
глянь сюда
http://www.sql.ru/forum/actualthread.aspx?tid=709877
будут вопросы задавай
...
Рейтинг: 0 / 0
Помогите с пересечение интервала времени
    #36340168
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. О! это тоже нужная вещь (в избранное)

У меня входные данные от [час:мин] до [час:мин] и поточное времья
Все бы просто сделал, дак от может быть 23 часа, а до - 2 часа ночи.

Думаю комуто точно пригодиться.
...
Рейтинг: 0 / 0
Помогите с пересечение интервала времени
    #36341141
.Михаил.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159Спасибо. О! это тоже нужная вещь (в избранное)

У меня входные данные от [час:мин] до [час:мин] и поточное времья
Все бы просто сделал, дак от может быть 23 часа, а до - 2 часа ночи.

та функция универсальная (чуть переделал), работает даже с секудндами.
Код: plaintext
1.
2.
3.
Function PERES_2(ByVal beg1 As Date, ByVal end1 As Date, ByVal beg2 As Date, end2 As Date) As Boolean
    PERES_2 = ((end2 >= beg1) And (end1 >= beg2))
End Function
попробуй так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Sub MySub()
Dim Zm_DiskoReg As Boolean
Dim dt1 As Date, dt2 As Date
dt1 = Date + TimeSerial( 23 ,  0 ,  0 ) ' начало времени
dt2 = DateAdd("d",  1 , Date) + TimeSerial( 2 ,  0 ,  0 ) ' конец времени
Zm_DiskoReg = PERES_2(dt1, dt2, Now, Now)   
MsgBox Zm_DiskoReg  
End Sub
...
Рейтинг: 0 / 0
Помогите с пересечение интервала времени
    #36344596
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чучуть незачет

Задаем только времья. На станции имеется возможность добавить несколько режимов диско. Владелец должен только указать период от и до в настройках.

К примеру наше времья сейчас 20:00.
От 16:00 до 22:00 должно = истина ,
и от 16:00 до 1:03 должно также = истина ,
а от 15:00 до 19:00 = ложь ,
от 20:15 до 22:10 или 03:00 также = ложь

В вашем упрощении всегда прибавляется 1 день к любому времени, а это получается, что если времья от > до (запрос ниже), то всеровно даст истину
? PERES_2("02.02.2009 11:40"," 03 .02.2009 15:30","02.02.2009 11:30","02.02.2009 15:50 ")

TimeSerial
Код: plaintext
TimeSerial(2, 0, 0)
- не знал такой функции, пригодится. Я прибавлял времья так
Код: plaintext
?#02:00:00#+date
...
Рейтинг: 0 / 0
Помогите с пересечение интервала времени
    #36344769
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тут посидел, посидел и вспомнил как работаю микроконтроллеры. Жаль что не пошел учиться, а так мечтал... Была такая книга, так там эти елементы нужно было не учить а зубрить - основано все на логике И, ИЛИ и НЕ. Вот я решил упростить все до минимума. И получилось! Было совсем не сложно. Главное желание :)
Код: plaintext
1.
2.
3.
Public Function ProverkaIntervalaVremeni(p_ot As Date, p_do As Date) As Boolean
  ProverkaIntervalaVremeni = p_ot <= p_do And p_ot <= Time And p_do >= Time Or p_ot >= p_do And p_ot <= Time And DateAdd("d",  1 , p_do) >= Time
End Function
...
Рейтинг: 0 / 0
Помогите с пересечение интервала времени
    #36344777
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
And DateAdd("d", 1, p_do) >= Time
можно не проверять )))


Код: plaintext
1.
2.
Public Function ProverkaIntervalaVremeni(p_ot As Date, p_do As Date) As Boolean
  ProverkaIntervalaVremeni = p_ot <= p_do And p_ot <= Time And p_do >= Time Or p_ot >= p_do And p_ot <= Time
End Function

но остался еще один период, шя прикину (когда time<=p_do and time<=p_ot and p_ot>=p_do

ДА! Так оно и есть. Все. Теперь все варианты перепробывал. Работает

Код: plaintext
1.
2.
Public Function ProverkaIntervalaVremeni(p_ot As Date, p_do As Date) As Boolean
  ProverkaIntervalaVremeni = p_ot <= p_do And p_ot <= Time And p_do >= Time Or p_ot >= p_do And p_ot <= Time Or time<=p_do and time<=p_ot and p_ot>=p_do
End Function
...
Рейтинг: 0 / 0
Помогите с пересечение интервала времени
    #36344782
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доступно меняю местами переменные чтоб понять что к чему (time)
и также избавляюсь от
Код: plaintext
And Time <= p_ot
в конце (т.к.нет необходимости проверять)
Окончательно добил
Код: plaintext
1.
2.
Public Function ProverkaIntervalaVremeni(p_ot As Date, p_do As Date) As Boolean
  ProverkaIntervalaVremeni = p_ot <= p_do And Time >= p_ot And Time <= p_do Or p_ot >= p_do And Time >= p_ot Or p_ot >= p_do And Time <= p_do
End Function
...
Рейтинг: 0 / 0
Помогите с пересечение интервала времени
    #36344794
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так, ну ладно, с этим разобрался.

Задача №2

Теперь посложнее задачу поставить нужно: В настройке *.ini передается временное значение (hh:mm) TimeOffComupter as date которое должно выключить компьютер после того как доиграет до конца трек, тоесть StatusPl1 as Boolean = False . Это сделать просто, но усложнение в том чтоб: когда включить программу в то времья которое должно было б уже погасить компьютер в то времья чтоб та функция уже не сработала (пусть ждет к следующему разу), а только тогда должен выключиться когда при запуске программы тот момент еще не настал, а при нормальной работе, и постоянном опросе таймера и изменении настоящего времья до того нужного момента + подождать на окончания трека.

Так... Надо подумать...
...
Рейтинг: 0 / 0
Помогите с пересечение интервала времени
    #36344862
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Готово

Form load...
Код: plaintext
If time >= GOL_PowerOffTime Then StatusNeMojnaOffComp = True

timer
Код: plaintext
1.
2.
3.
   If Not (time > GOL_PowerOffTime And StatusNeMojnaOffComp = True) Then
     StatusNeMojnaOffComp = False
   End If
Код: plaintext
1.
2.
   If time >= GOL_PowerOffTime And StatusNeMojnaOffComp = False And GOL_PowerOff = True Then
       Call KnOffComp
   End If
...
Рейтинг: 0 / 0
Помогите с пересечение интервала времени
    #36344960
.Михаил.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159Чучуть незачет

Задаем только времья. На станции имеется возможность добавить несколько режимов диско. Владелец должен только указать период от и до в настройках.

К примеру наше времья сейчас 20:00.
От 16:00 до 22:00 должно = истина ,
и от 16:00 до 1:03 должно также = истина ,
а от 15:00 до 19:00 = ложь ,
от 20:15 до 22:10 или 03:00 также = ложь

В вашем упрощении всегда прибавляется 1 день к любому времени, а это получается, что если времья от > до (запрос ниже), то всеровно даст истину
? PERES_2("02.02.2009 11:40"," 03 .02.2009 15:30","02.02.2009 11:30","02.02.2009 15:50 ")

TimeSerial
Код: plaintext
TimeSerial(2, 0, 0)
- не знал такой функции, пригодится. Я прибавлял времья так
Код: plaintext
?#02:00:00#+date

нужно сделать проверку на вводимые значения времени
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Sub MySub()
Dim Zm_DiskoReg As Boolean
Dim dt1 As Date, dt2 As Date
dt1 = Date + TimeSerial( 23 ,  0 ,  0 ) ' начало времени
dt2 = Date + TimeSerial( 2 ,  0 ,  0 ) ' конец времени
If Not (dt1 < dt2) Then dt2 = DateAdd("d",  1 , dt2) ' вот и проверка
Zm_DiskoReg = PERES_2(dt1, dt2, Now, Now)   
MsgBox Zm_DiskoReg  
End Sub


...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Помогите с пересечение интервала времени
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]