Работа с датой и временем

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Работа с датой и временем

Сообщение kuhtiov » 08.07.2009 (Ср) 5:49

Есть дата и время последнего забора почты. Нужно задать условие, если прошло больше получаса, сообщить об этом, ну например Msgbox. Делал следующим образом, брал дату и время, разбивал на часы, минуты и т.д., затем сравнивал. Но вариант этот явно туповат, уверен, есть способ все упростить. Если кто знает как, подскажите пожалуйста, куда копать. Поиск юзал, нашел то что нужно, но под .NET

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Работа с датой и временем

Сообщение Денис » 08.07.2009 (Ср) 7:36

Буквально на днях был топик, как отсчитывать промежутки по полчаса. (не .net)
viewtopic.php?f=1&t=40079
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: Работа с датой и временем

Сообщение kuhtiov » 08.07.2009 (Ср) 11:22

Я думаю мы меня не совсем поняли. Для пояснения, даю часть своего брелового кода

Код: Выделить всё
' Проверяем дату и время
                ErrIFNS = 1
    If DateDiff("d", Mid(s, (Nomsimv) + 43, 10), Format(Date, "dd.mm.yyyy")) < CAObdd Then
        If DateDiff("h", Mid(s, (Nomsimv) + 54, 5), Format(Time$, "hh:mm")) < CAObhh Then
            If DateDiff("n", Mid(s, (Nomsimv) + 54, 5), Format(Time$, "hh:mm")) < CAObmm Then
                ErrIFNS = 0
            Else
            End If
        Else
        End If
    Else
    End If
' Применяем результат
If ErrIFNS = 0 Then
                CAObName.BackColor = &H80FF80
                CAObBox.BackColor = &H80FF80
                CAObData.BackColor = &H80FF80
Else
                CAObName.BackColor = &H8080FF
                CAObBox.BackColor = &H8080FF
                CAObData.BackColor = &H8080FF
End if

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Работа с датой и временем

Сообщение alibek » 08.07.2009 (Ср) 13:01

А что, DateDiff("s", d1, d2) или (d1-d2) религия использовать не позволяет?
Lasciate ogni speranza, voi ch'entrate.

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: Работа с датой и временем

Сообщение kuhtiov » 08.07.2009 (Ср) 13:18

Ну и что мне это даст? Я почти то-же самое и делал. Или я что-то не понимаю?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Работа с датой и временем

Сообщение alibek » 08.07.2009 (Ср) 13:22

Ты делал вообще не то.
Lasciate ogni speranza, voi ch'entrate.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Работа с датой и временем

Сообщение MIT » 08.07.2009 (Ср) 13:31

kuhtiov писал(а):            Else
            End If
:?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: Работа с датой и временем

Сообщение kuhtiov » 09.07.2009 (Чт) 8:03

Спасибо, помогло. Теперь другой геморой :) Есть время в секуднах, нужно перевести в text1 = дни, text2 = часы, text3 = минут. Есть подобная функция в vb или ручками лопатить?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Работа с датой и временем

Сообщение Хакер » 09.07.2009 (Чт) 8:05

DatePart
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: Работа с датой и временем

Сообщение kuhtiov » 09.07.2009 (Чт) 8:58

А можно популярнее для особо одаренных?

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Работа с датой и временем

Сообщение Денис » 09.07.2009 (Чт) 9:05

kuhtiov писал(а):А можно популярнее для особо одаренных?

ДЛЯ ОСОБО ОДАРЕННЫХ В СТУДИИ ТЕХНОЛОГИЯ INTELLISENCE ПРИМЕНЯЕТСЯ!
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Работа с датой и временем

Сообщение Хакер » 09.07.2009 (Чт) 9:09

Денис, перестань орать.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: Работа с датой и временем

Сообщение kuhtiov » 09.07.2009 (Чт) 10:04

Денис писал(а):
kuhtiov писал(а):А можно популярнее для особо одаренных?

ДЛЯ ОСОБО ОДАРЕННЫХ В СТУДИИ ТЕХНОЛОГИЯ INTELLISENCE ПРИМЕНЯЕТСЯ!


Я не лентяй, поиск и google юзал. Но все таки вопрос остался для меня открыт. Не понял как использовать данную функцию в моем случаи, поэтому и попросил уточнить.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Работа с датой и временем

Сообщение alibek » 09.07.2009 (Чт) 10:12

Lasciate ogni speranza, voi ch'entrate.

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: Работа с датой и временем

Сообщение kuhtiov » 09.07.2009 (Чт) 10:19

Ну это я понял, могу выдрать из времени часы, минуты, секунды, дату и т.д. А наоборот? Нужно из например 86400 сек. сформировать время: кол-во дней, часов, минут

VBTerminator
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 415
Зарегистрирован: 19.11.2008 (Ср) 20:10

Re: Работа с датой и временем

Сообщение VBTerminator » 09.07.2009 (Чт) 10:22

kuhtiov писал(а):Нужно из например 86400 сек. сформировать время: кол-во дней, часов, минут

Если 86400 - это секунды, значит 86400/60 - минуты 86400/3600 - часы, 86400/3600/24 - дни.

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: Работа с датой и временем

Сообщение kuhtiov » 09.07.2009 (Чт) 10:38

Это и ежу понятно. Я ищу функцию чтоб ручками это не делать. Ведь там придется еще кучу условий наворачивать ибо дней может оказаться 0, а на 0 как я думаю вам известно не делится. У меня получилось примерно так:

Код: Выделить всё
If IFN01 > 0 Then ' Если в файле настроек кол-во секунд > 0
   
        ' Считаем дни
    If IFN01 > 86400 Then ' Если кол-во секунд > 1 дня
        if01d = Fix(IFN01 / 86400) ' Расчитываем кол-во дней
   
    Else
    ifn01d = 0 ' Если кол-во секунд < 1 дня, присваиваем 0 дней
   
    End If

        ' Считаем часы
    If ifn01d > 0 Then ' Если кол-во дней > 0
    ifn01h = (Fix(IFN01 / 3600) - ifn01d * 24) ' Считаем кол-во часов - сумма часов дней
   
    Else
    ifn01h = Fix(IFN01 / 3600)  ' Если кол-во дней = 0, прочто считаем кол-во часов
   
    End If


        ' Считаем минуты

       
    If ifn01h > 0 Then ' Если кол-во дней > 0
           
            If ifn01d > 0 Then ' Если кол-во минут > 0
           
           
                ifn01m = Fix(IFN01 / (ifn01d * 24) / (ifn01h * 60))
           
           
        Else
                    If ifn01h > 1 Then
                ifn01m = Fix((IFN01 / 60) / (ifn01h * 24))
                    Else
                ifn01m = Fix(IFN01 / (60) - 60)
                End If

        End If
   
    Else
                ifn01m = Fix(IFN01 / (60))
               
    End If

Else
    ifn01d = 0
End If


Дело в том, что это по одной переменной, всего их 19. Описывать такую шнягу для 19 переменных не очень хочется. Длинновато получится. Может подскажите как упростить себе жизнь?

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Работа с датой и временем

Сообщение Денис » 09.07.2009 (Чт) 12:23

kuhtiov писал(а):Дело в том, что это по одной переменной, всего их 19. Описывать такую шнягу для 19 переменных не очень хочется. Длинновато получится. Может подскажите как упростить себе жизнь?

:lol: Оформи этот код в процедуру и вызывай для каждого числа!

Код: Выделить всё
Private Sub IFN_Convert(byval IFN_Sec as long, byref IFN_d, byref IFN_h, byref IFN_m, byref IFN_s)

'Твой код где вместо "01" поставь прочерк "_"

end sub


Работаешь с ней так:

Код: Выделить всё
dim dim dim 'Ну ты понял

IFN01 = 123456789 ' допустим
IFN02 = 12345678
IFN03 = 1234567
...
IFN19 = 12344321

IFN_Convert IFN01, IFN01d, IFN01h, IFN01m, IFN01s
IFN_Convert IFN02, IFN02d, IFN02h, IFN02m, IFN02s
IFN_Convert IFN03, IFN03d, IFN03h, IFN03m, IFN03s
...
IFN_Convert IFN19, IFN19d, IFN19h, IFN19m, IFN19s


Еще короче, если вместо IFN01..IFN19 сделать массив IFN(19). И еще короче этого, если сделать структуру, а массив делать типа этой структуры. Показываю:

Код: Выделить всё
private Type IFN
    SecFull as Long
    Hours as Long
    Minutes as Long
    Seconds as Long
end Type


После чего слегка подпилить процедуру, подпилить код процедуры, подпилить код вызова процедуры.
Последний раз редактировалось Денис 09.07.2009 (Чт) 12:46, всего редактировалось 1 раз.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: Работа с датой и временем

Сообщение kuhtiov » 09.07.2009 (Чт) 12:43

Ну, вариант :) А это вообще нормально, что при конвертации из времени в секунды, а потом из секунд во время, у меня получаются разные результаты? Заманался млин уже :twisted:

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Работа с датой и временем

Сообщение Денис » 09.07.2009 (Чт) 12:48

kuhtiov писал(а):Ну, вариант :) А это вообще нормально, что при конвертации из времени в секунды, а потом из секунд во время, у меня получаются разные результаты? Заманался млин уже :twisted:

Не нормально, конечно же. Что-то ты делаешь не так. Перепроверяй код.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Работа с датой и временем

Сообщение MIT » 09.07.2009 (Чт) 13:49

В глаза бросается строчка
Код: Выделить всё
If IFN01 > 86400 Then ' Если кол-во секунд > 1 дня
А если IFN01 = 86400, значит ноль дней?

И аналогично для остального.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: Работа с датой и временем

Сообщение kuhtiov » 10.07.2009 (Пт) 5:11

MIT писал(а):В глаза бросается строчка
Код: Выделить всё
If IFN01 > 86400 Then ' Если кол-во секунд > 1 дня
А если IFN01 = 86400, значит ноль дней?

И аналогично для остального.


Ну конечно, ноль дней и тогда дни в расчет не бирем. Или я не прав?

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Re: Работа с датой и временем

Сообщение kuhtiov » 10.07.2009 (Пт) 5:21

А есть вообще возможность, сделать что-то вроде этого:
time1 = "11:05:18"
time2 = "12:18:25"
MsgBox time2 - time1

VBTerminator
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 415
Зарегистрирован: 19.11.2008 (Ср) 20:10

Re: Работа с датой и временем

Сообщение VBTerminator » 10.07.2009 (Пт) 9:17

kuhtiov писал(а):А есть вообще возможность, сделать что-то вроде этого:
time1 = "11:05:18"
time2 = "12:18:25"
MsgBox time2 - time1

Есть.
Код: Выделить всё
a = TimeValue("11:00:00")
b = TimeValue("11:00:01")
MsgBox DateDiff("s", a, b, vbUseSystemDayOfWeek, vbUseSystem)


На выходе получаем разницу между b и a в секундах.
Если разницу надо выразить в других величинах, замени "s" на другое значение

Visual Вова
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 19
Зарегистрирован: 28.06.2009 (Вс) 2:57
Откуда: г. Петропавловск-Камчатский

Re: Работа с датой и временем

Сообщение Visual Вова » 18.08.2009 (Вт) 17:09

Очень просто сделать так:

Код: Выделить всё
Private Function IsLost30Minutes(ByVal StartTime As Time, ByVal EndTime) As Boolean
   If Hour(CDate(EndTime - StartTime)) = "0" Then
      If Minute(CDate(EndTime - StartTime)) = "30" Then
         If Second(CDate(EndTime - StartTime)) = "0" Then IsLost30Minutes = True
      End If
   End If
End If
End Function


Правда, эта функция (не знаю, будет работать или нет) не будет работать, если StartTime > 23:30.
С уважением, 12-летний мальчик Вова.

Изображение

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Работа с датой и временем

Сообщение Viper » 18.08.2009 (Вт) 18:31

Visual Вова писал(а):Правда, эта функция (не знаю, будет работать или нет) не будет работать, если StartTime > 23:30.
А ничего, что правильный ответ приведен аккурат постом выше?
Весь мир матрица, а мы в нем потоки байтов!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 19

    TopList