Private Sub Command1_Click()
Dim t1 As Date, t2 As Date, result As Date
t1 = Time
t2 = TimeSerial(0, 3, 50)
Debug.Print "t1 = " & t1 & vbCrLf & "t2 = " & t2
result = TimeSum(t1, t2)
Debug.Print FormatDateTime(result, vbLongTime)
result = result * 2
'result = t1 + t2 ' да! можно и так, но «часы» складываюся тоже
Debug.Print FormatDateTime(result, vbLongTime)
End Sub
Private Function TimeSum(Part1 As Date, Part2 As Date) As Date
'TimeSum = DateAdd("H", Hour(Part1) + Hour(Part2), TimeSum)
TimeSum = DateAdd("N", Minute(Part1) + Minute(Part2), TimeSum)
TimeSum = DateAdd("S", Second(Part1) + Second(Part2), TimeSum)
End Function
t1% = 394 ' 6 мин 34 с
t2% = 1231 ' 20 мин 31 с
intTime& = t1 + t2
Dim H As Integer, M As Integer, S As Integer, intTime As Long
intTime = 1625 '
H = intTime \ 3600
intTime = intTime Mod 3600
M = intTime \ 60
S = intTime Mod 60
Debug.Print FormatDateTime(TimeSerial(H, M, S), vbLongTime) ' 0:27:05
Name|Time
-------------------
Name|00:02:24
Name|00:07:12
Name|01:30:00
-------------------
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim base As DateTime = "10:00:00" ' базовое значение уменьшаемого взято заведомо больше вычитаемого
'**************************************************
Dim time1 As DateTime = "00:05:00" ' вычитаемое 1
Dim time2 As DateTime = "00:12:00" ' вычитаемое 2
Dim time3 As DateTime = "00:10:00" ' вычитаемое 3
Dim time4 As DateTime = "00:01:00" ' вычитаемое 4
Dim time5 As DateTime = "00:03:00" ' вычитаемое 5
'**************************************************
Dim result As TimeSpan
' поехали!
' вычитаем первое значение из базового уменьшаемого значения:
result = base.Subtract(time1)
' конвертируем результат в Date и вновь сохраняем его в переменной, хранящей базовое значение (далее по кругу)
base = CDate(result.ToString)
result = base.Subtract(time2)
base = CDate(result.ToString)
result = base.Subtract(time3)
base = CDate(result.ToString)
result = base.Subtract(time4)
base = CDate(result.ToString)
result = base.Subtract(time5)
base = CDate(result.ToString)
' base в настоящий момент, содержит время 09:29:00
' теперь получаем сумму time1+time2+time3+time4+time5
' для этого из первоначального значения base,
' то есть 10:00:00 вычитаем текущее значение base,
' то есть 09:29:00
result = CDate("10:00:00").Subtract(base)
Dim strMessage As String
strMessage = "Сумма времён: time1+time2+time3+time4+time5 равна " & result.ToString
MsgBox(strMessage)
End Sub
crabdance писал(а):как из string="00:30:00" получить лонг_структуру(0,30,0). То есть в принципе я догадываюсь, как это сделать, сложить, провести обратное преобразование, но разве нет простого метода, который сам всё это делает?
pronto писал(а):crabdance писал(а):как из string="00:30:00" получить лонг_структуру(0,30,0). То есть в принципе я догадываюсь, как это сделать, сложить, провести обратное преобразование, но разве нет простого метода, который сам всё это делает?
«лонг_структура» — это как? Попробуй TimeValue...
Dim result As TimeSpan
Dim t1 As TimeSpan
Dim t2 As TimeSpan
t1 = TimeSpan.Parse("00:20:20")
t2 = TimeSpan.Parse("00:1:48")
result = t1.Add(t2)
stringtime = CStr(Date)
timespantime = TimeSpan.Parse(stringtime)
resulttime = timespantime+timespantime
stringresulttime=resulttime.ToString
datetime = CDate(stringresulttime)
Module All
Public Sub Main()
Dim Res As TimeSpan
For Each T As String In {"00:02:24", "00:07:12", "01:30:00"}
Res += TimeSpan.Parse(T)
Next T
Console.WriteLine(Res)
Console.ReadKey()
End Sub
End Module
Module All
Public Sub Main()
Dim Res As TimeSpan
For Each T As String In {"00:02:24", "00:07:12", "01:30:00"}
Res += TimeSpan.Parse(T)
Next T
Console.WriteLine(Res) ' Сумма
Console.WriteLine(New TimeSpan(Res.Ticks * 2)) ' Сумма, умноженная на 2
Console.ReadKey()
End Sub
End Module
crabdance писал(а):Вы не знаете, что такое "многочисленные итерации сложения"?
crabdance писал(а):Время берётся из Date и возвращается в него же.
crabdance писал(а):Вы всерьёз полагаете, что (New TimeSpan(Res.Ticks * 2)) == "Всё просто же"?
crabdance писал(а):Код устраивает, не устраивает фраз "Всё просто же".
crabdance писал(а):А я так не полагаю.
Qwertiy писал(а):crabdance писал(а):Код устраивает, не устраивает фраз "Всё просто же".
Ну ok, сорри.
Не хотел никого обидеть, просто на мой взгляд, это просто.
strTime as String = "12:22:00"
SummTime as Time = Nothing
SummTime = CTime(strTime) + CTime(strTime)
Date3 = Date1 - Date2
Date3 = Date1+Date2
Qwertiy писал(а):crabdance писал(а):А я так не полагаю.
1. Пишем умножение - видим, что не поддерживается.
2. Просматриваем варианты конструктора - их 4.
3. Видим конструктор принимающий тики, а это минимальный юнит для измерения времени.
4. Берём тики из того, что надо умножить, умножаем на нужное значение и передаём в конструктор.
Итого 4 шага, чтобы получить нужный результат не зная, как это сделать. Я этого тоже не знал, но сделал за несколько минут, не лазия ни в гугл, ни даже в справку/msdn - всё по подсказкам студии - поэтому и написал, что всё просто.
crabdance писал(а):К примеру можно сделать так и это сработает:
- Код: Выделить всё
Date3 = Date1 - Date2
Console.WriteLine((#12/21/2014# - #12/22/2014#).GetType().FullName)
crabdance писал(а):Так и со временем: Date.AddHour(x) есть, а Date.AddPeriod(xx:xx:xx) уже нет.
Dim SomeDate As Date = Date.Today()
SomeDate += New TimeSpan(0, 12, 16)
Console.WriteLine(SomeDate)
Console.ReadKey()
Dim d1 As Date
Dim d2 As Date
Dim d3 As Date
d1 = "13:00:07"
d2 = "03:04:00"
d3 = d1 + d2
Caption = d3
Qwertiy писал(а):Дата - это как точка
Mikle писал(а):Идентификатором точки служит расстояние, а расстояния можно складывать.
Mikle писал(а):а в VB6 это работает
Qwertiy писал(а):Mikle писал(а):Я складываю 17 марта 2014 18:47:32 и 2 февраля 2015 12:16:37. Что я хочу получить и нафига мне это надо?
Mikle писал(а):однозначно выражаемую в секундах (а ведь так и есть)
crabdance писал(а):Есть тип Date, есть DateTime, давайте напряжёмся, сделаем шажок и добавим тип Time! Вакаримас-ка?
Qwertiy писал(а):Она не в секундах. По крайней мере, вариант в VB6 дробный, да ещё и с нелогичным значением дробной части (это я про отрицательные даты)
Сейчас этот форум просматривают: Yandex-бот и гости: 22