Работа со временем

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

Работа со временем

Сообщение Sun07 » 01.06.2006 (Чт) 2:06

Мне нужно сравнить два времени - системное (текущее) и в виде строки, например, "15:40" (часы и минуты). Как это сделать?

MeMBus
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 450
Зарегистрирован: 23.02.2005 (Ср) 7:03
Откуда: Из леса...

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

Сообщение MeMBus » 01.06.2006 (Чт) 3:34

Sun07 писал(а):Мне нужно сравнить два времени - системное (текущее) и в виде строки, например, "15:40" (часы и минуты). Как это сделать?

См. CDate, Time, Format....
Бороться и искать, найти и перепрятать!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 01.06.2006 (Чт) 5:20

Код: Выделить всё
If Time > CDate("15:40") Then
Изображение

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 01.06.2006 (Чт) 12:25

Спасибо, Тёмыч! А почему CDate возвращает форматированную строку, если написать MsgBox CDate("15:40") или число Long, если написать longTemp=CDate("15:40") (Dim longTemp as Long)?

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 01.06.2006 (Чт) 12:28

Это называется "неявное преобразование типов"
Проверь также
Код: Выделить всё
Dim fTemp As Double
fTemp = CDate("15:40")

Al Khamid
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 274
Зарегистрирован: 11.02.2004 (Ср) 10:00
Откуда: Москва, Ховрино

Сообщение Al Khamid » 03.06.2006 (Сб) 10:51

Дл
Последний раз редактировалось Al Khamid 06.11.2007 (Вт) 17:04, всего редактировалось 1 раз.

RUSYA
Обычный пользователь
Обычный пользователь
 
Сообщения: 84
Зарегистрирован: 22.07.2005 (Пт) 20:17
Откуда: Харьков

Сообщение RUSYA » 04.06.2006 (Вс) 1:36

Код: Выделить всё
Private Function DiapazonTime(Ishod As String, Begin As String, Finish As String) As Boolean
'Определение лежит ли время Ishod в диапазоне между Begin и Finish, например:
'Ishod = "22.02.06 12:00:00": Begin = "21.02.06 06:00:00": Finish = "24.02.06 10:00:00"
'Ishod - лежит в этом диапазоне времени. Функция определяет учитывая дату и время,
'а также учитывая кол-во дней в месяцах, высокосные года итп итд... :)
Dim a As Long, b As Long
Dim secIshodTime As Double, secBeginTime As Double, secFinishTime As Double
Dim probel As Long, i_h As Long, i_m As Long, i_s As Long, b_h As Long, b_m As Long, _
b_s As Long, f_h As Long, f_m As Long, f_s As Long
Dim IshodTime As String, BeginTime As String, FinishTime As String

'Находим разницу в днях между исходным и начальным диапазоном
a = Abs(DateDiff("d", CDate(Ishod), CDate(Begin)) * 24 * 60 * 60)
'И между начальным и конечным
b = Abs(DateDiff("d", CDate(Begin), CDate(Finish)) * 24 * 60 * 60)
'DateDiff учитывает особенности определённого месяца, года и возвращает верную
'разницу между датами в днях, далее разница * 24 * 60 * 60, т.е. переводим кол-во
'дней в секунды

'Вырезаем из всей строки время
probel = InStr(1, Ishod, " ", 1):
If probel > 0 Then IshodTime = Trim$(Mid$(Ishod, probel, Len(Ishod)))
probel = InStr(1, Begin, " ", 1)
If probel > 0 Then BeginTime = Trim$(Mid$(Begin, probel, Len(Begin)))
probel = InStr(1, Finish, " ", 1)
If probel > 0 Then FinishTime = Trim$(Mid$(Finish, probel, Len(Finish)))

'Разбиваем часы, минуты и секунды на отдельные переменные
i_h = Val(Split(IshodTime, ":")(0)): b_h = Val(Split(BeginTime, ":")(0))
i_m = Val(Split(IshodTime, ":")(1)): b_m = Val(Split(BeginTime, ":")(1))
i_s = Val(Split(IshodTime, ":")(2)): b_s = Val(Split(BeginTime, ":")(2))
f_h = Val(Split(FinishTime, ":")(0)): f_m = Val(Split(FinishTime, ":")(1))
f_s = Val(Split(FinishTime, ":")(2))

'Теперь всё переводим в секунды
secIshodTime = (i_h * 60 * 60) + (i_m * 60) + i_s
secBeginTime = (b_h * 60 * 60) + (b_m * 60) + b_s
secFinishTime = (f_h * 60 * 60) + (f_m * 60) + f_s

'Теперь прибавляем к секундам разницы даты, секунды разности диапазонов времени
a = a + (secIshodTime - secBeginTime)
b = b + (secFinishTime - secBeginTime)

If a <= b Then 'И если начальное меньше или равно разницы диапазона
    DiapazonTime = True 'тогда дата и время лежит в диапазоне
Else 'а иначе
    DiapazonTime = False 'не лежит
End If ' :)

'Copyright © 2006 | HACKER.
End Function
А как оно на самом деле - Х.З. !

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 04.06.2006 (Вс) 1:52

RUSYA, а почему бы не так?
Код: Выделить всё
Private Function DiapazonTime(Ishod As String, Begin As String, Finish As String) As Boolean
    DiapazonTime = (CDate(Ishod) >= CDate(Begin)) And (CDate(Ishod) <= CDate(Finish))
End Function

во сколько раз это короче?
Изображение


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

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

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

    TopList