Сложение времени, минут, секунд чохом: result="mm:ss"+"mm:ss

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

crabdance
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 10.01.2015 (Сб) 2:54

Сложение времени, минут, секунд чохом: result="mm:ss"+"mm:ss

Сообщение crabdance » 10.01.2015 (Сб) 3:14

Здравствуйте.
Писал программу, писал, писал, писал, дошёл до момента, когда надо сложить "минуты:секунды"+"минуты:секунды".
Щас, думаю, раз-два и готово.
Собсно шесть часов прошло, а ничего не готово. TimeSpan'ы, CDate, DateTime, DateAndTime и прочая и прочая уже в глазах рябят.
Ничего не выходит совершенно. От слова ни че го!

Фактически требуется следующее:
result = #mm:ss# + #mm:ss#
03:22 = 01:20 + 02:02

В идеале:
result = #mm:ss# * multiplicator
04:04 = 02:02 * 2

Буду благодарен за помощь. Спасибо.
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: Сложение времени, минут, секунд чохом: result="mm:ss"+"m

Сообщение pronto » 10.01.2015 (Сб) 9:58

Если слагаемые хранятся в формате Date, то:

Код: Выделить всё
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


чтобы из intTime получить часы, минуты и секунды:

Код: Выделить всё
   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
O, sancta simplicitas!

crabdance
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 10.01.2015 (Сб) 2:54

Re: Сложение времени, минут, секунд чохом: result="mm:ss"+"m

Сообщение crabdance » 10.01.2015 (Сб) 11:47

То есть, как я понял, VB.NET В ПРИНЦИПЕ не умеет работать со временем в его привычном, "бытовом" формате записи.
Я не могу взять лист, содержащий понятный человеку список :

Код: Выделить всё
Name|Time
-------------------
Name|00:02:24
Name|00:07:12
Name|01:30:00
-------------------

и получив значения столбца Time просуммировать их, как обычные временные значения, без сериализации, конвертации в таймспан и тому подобной, откровенно тупорылой, ерунды? Блестяще. Экселю достаточно указать формат "Время" и после этого он ловко умножает записи, вида:
"00:30:00" хоть на сколько. А васику, значит, не с руки...

Все примеры предлагают к некоторому значению времени прибавить что-то вроде (0,20,50,34) и НИ ОДИН пример не показывает, как из string="00:30:00" получить лонг_структуру(0,30,0). То есть в принципе я догадываюсь, как это сделать, сложить, провести обратное преобразование, но разве нет простого метода, который сам всё это делает? Примеры, следовательно, написаны спустя рукава, а в мсдн мы и сами искать умеем.

Я сделал на subtraction. Для "бытовых" применений сойдёт:
Код: Выделить всё
    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 10.01.2015 (Сб) 12:52, всего редактировалось 1 раз.
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: Сложение времени, минут, секунд чохом: result="mm:ss"+"m

Сообщение pronto » 10.01.2015 (Сб) 12:03

crabdance писал(а):как из string="00:30:00" получить лонг_структуру(0,30,0). То есть в принципе я догадываюсь, как это сделать, сложить, провести обратное преобразование, но разве нет простого метода, который сам всё это делает?

«лонг_структура» — это как? Попробуй TimeValue...
O, sancta simplicitas!

crabdance
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 10.01.2015 (Сб) 2:54

Re: Сложение времени, минут, секунд чохом: result="mm:ss"+"m

Сообщение crabdance » 10.01.2015 (Сб) 12:17

pronto писал(а):
crabdance писал(а):как из string="00:30:00" получить лонг_структуру(0,30,0). То есть в принципе я догадываюсь, как это сделать, сложить, провести обратное преобразование, но разве нет простого метода, который сам всё это делает?

«лонг_структура» — это как? Попробуй TimeValue...


Обычная. Страшный таймспан представляет собой структуру, содержащую группу данных типа Long, разделённых запятыми.
Мне TimeValue на вкус попробовать? Вы понимаете, что вопрос не в преобразовании типов, а в сложении двух типов Date?
Date3 = Date1+Date2 - попробуйте сложить. Что? Они конкатенировались? Айяяяяй, как же таг?

Date.Add(value) опять же требует приведения значения value к TimeSpan, а механизма конвертации String, Date итп. в TimeSpan НЕТ!
Вообще, похоже, НИЧТО нельзя конвертировать в TimeSpan средствами васика. Это прекрасно, я считаю!
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

crabdance
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 10.01.2015 (Сб) 2:54

Re: Сложение времени, минут, секунд чохом: result="mm:ss"+"m

Сообщение crabdance » 10.01.2015 (Сб) 13:13

Вдруг наткнулся на TimeSpan.Parse(string)
Вчера 6 часов потратил на поиски метода конвертации строки в TimeSpan и пусто. Видимо что-то распыляли, не иначе.
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: Сложение времени, минут, секунд чохом: result="mm:ss"+"m

Сообщение pronto » 10.01.2015 (Сб) 14:16

Я тоже уже разобрался :shock:
Код: Выделить всё
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)

... Ну индусы и намудрили ...
O, sancta simplicitas!

crabdance
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 10.01.2015 (Сб) 2:54

Re: Сложение времени, минут, секунд чохом: result="mm:ss"+"m

Сообщение crabdance » 10.01.2015 (Сб) 14:47

Да атас просто. В целом операция умножения времени на 2 выглядит так:

Код: Выделить всё
stringtime = CStr(Date)
timespantime = TimeSpan.Parse(stringtime)
resulttime = timespantime+timespantime
stringresulttime=resulttime.ToString
datetime = CDate(stringresulttime)

Укурыши долбаные.

Понятно, что записать это можно и по другому, но если разложить сложное выражение на ряд простых, то вот это и получится. А надо было просто умножить "00:20:00" на 2 и получить "00:40:00".
Кстати как умножать пока не понял. Выполняю умножение многочисленными итерациями сложения, а то если тратить время на разбор полёта индусской мысли, вместо писания кода, то до морковкиных загодей не закончишь. Вообще, конечно, гомнокот выходит.
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Re: Сложение времени, минут, секунд чохом: result="mm:ss"+"m

Сообщение Qwertiy » 10.01.2015 (Сб) 15:25

Ну всё же просто:
Код: Выделить всё
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

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 10.01.2015 (Сб) 15:27

А вот с умножением на 2:
Код: Выделить всё
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
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 10.01.2015 (Сб) 2:54

Re: Сложение времени, минут, секунд чохом: result="mm:ss"+"m

Сообщение crabdance » 10.01.2015 (Сб) 15:30

Qwertiy

Вы не знаете, что такое "многочисленные итерации сложения"?
Вы всерьёз полагаете, что (New TimeSpan(Res.Ticks * 2)) == "Всё просто же"?

Никто ни в чём ничего не хранит. Кусок кода является примером простейшей операции умножения времени на 2. Время берётся из Date и возвращается в него же.
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 10.01.2015 (Сб) 15:35

crabdance писал(а):Вы не знаете, что такое "многочисленные итерации сложения"?

Я показал код, который нормально использует операцию умножения - чем не устраивает?

crabdance писал(а):Время берётся из Date и возвращается в него же.

Зачем? По приведённому коду я вижу только хранение длительности в Date вместо TimeSpan, про что и сказал, что так делать не надо.
Да ещё и приведения чере CStr и CDate вместо нормальных.

crabdance писал(а):Вы всерьёз полагаете, что (New TimeSpan(Res.Ticks * 2)) == "Всё просто же"?

Да, я именно так и полагаю.

crabdance
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 10.01.2015 (Сб) 2:54

Re: Сложение времени, минут, секунд чохом: result="mm:ss"+"m

Сообщение crabdance » 10.01.2015 (Сб) 15:36

Низачем. Это пример.

Код устраивает, не устраивает фраза "Всё просто же".

А я так не полагаю. На этом и закончим.
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 10.01.2015 (Сб) 15:37

crabdance писал(а):Код устраивает, не устраивает фраз "Всё просто же".

Ну ok, сорри.
Не хотел никого обидеть, просто на мой взгляд, это просто.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 10.01.2015 (Сб) 15:43

crabdance писал(а):А я так не полагаю.

1. Пишем умножение - видим, что не поддерживается.
2. Просматриваем варианты конструктора - их 4.
3. Видим конструктор принимающий тики, а это минимальный юнит для измерения времени.
4. Берём тики из того, что надо умножить, умножаем на нужное значение и передаём в конструктор.

Итого 4 шага, чтобы получить нужный результат не зная, как это сделать. Я этого тоже не знал, но сделал за несколько минут, не лазия ни в гугл, ни даже в справку/msdn - всё по подсказкам студии - поэтому и написал, что всё просто.

crabdance
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 10.01.2015 (Сб) 2:54

Re: Сложение времени, минут, секунд чохом: result="mm:ss"+"m

Сообщение crabdance » 10.01.2015 (Сб) 15:48

Qwertiy писал(а):
crabdance писал(а):Код устраивает, не устраивает фраз "Всё просто же".

Ну ok, сорри.
Не хотел никого обидеть, просто на мой взгляд, это просто.


Просто это:
strTime as String = "12:22:00"
SummTime as Time = Nothing

SummTime = CTime(strTime) + CTime(strTime)

Вот это просто, логично и соответствует духу языка. А введение неких тиков в простейшие операции (не для компилятора) это бессмысленное усложнение.

К примеру можно сделать так и это сработает:
Код: Выделить всё
Date3 = Date1 - Date2


А вот это уже НЕ сработает:
Код: Выделить всё
Date3 = Date1+Date2

Прикольно? Прикольно. Объяснимо? Совершенно необъяснимо.

Так и со временем: Date.AddHour(x) есть, а Date.AddPeriod(xx:xx:xx) уже нет.
Последний раз редактировалось crabdance 10.01.2015 (Сб) 17:08, всего редактировалось 2 раз(а).
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

crabdance
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 10.01.2015 (Сб) 2:54

Re: Сложение времени, минут, секунд чохом: result="mm:ss"+"m

Сообщение crabdance » 10.01.2015 (Сб) 15:53

Qwertiy писал(а):
crabdance писал(а):А я так не полагаю.

1. Пишем умножение - видим, что не поддерживается.
2. Просматриваем варианты конструктора - их 4.
3. Видим конструктор принимающий тики, а это минимальный юнит для измерения времени.
4. Берём тики из того, что надо умножить, умножаем на нужное значение и передаём в конструктор.

Итого 4 шага, чтобы получить нужный результат не зная, как это сделать. Я этого тоже не знал, но сделал за несколько минут, не лазия ни в гугл, ни даже в справку/msdn - всё по подсказкам студии - поэтому и написал, что всё просто.


Это ничего не значит. Здесь работает уже не использование предоставляемого инструментария, а принцип "надо чтонить найти, что можно использовать". Я использую итерации, так как не додумался до тиков (а до этого использовал сложение вычитанием тоже ведь находка, правда?), вы вот тики нашли. Это неправильный подход. Операции со временем БАЗОВЫЕ, современный язык должен предоставлять функционал по ним, сравнимый с функционалом экселя.
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

crabdance
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 10.01.2015 (Сб) 2:54

Re: Сложение времени, минут, секунд чохом: result="mm:ss"+"m

Сообщение crabdance » 10.01.2015 (Сб) 17:12

А вообще - здравствуйте! 100 лет здесь не был. Очень рад тому, что форум продолжает жить и на нём есть люди, готовые помочь, а не в гугл отправить. Это здорово.

Если кому интересно, то в "прошлой жизни" меня звали Member.
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 10.01.2015 (Сб) 17:55

crabdance писал(а):К примеру можно сделать так и это сработает:
Код: Выделить всё
Date3 = Date1 - Date2

Эм.. Что нужно сделать, чтобы это сработало?
Разность двух дат - это интервал времени, в чём можно убедиться, выполнив такой код:
Код: Выделить всё
Console.WriteLine((#12/21/2014# - #12/22/2014#).GetType().FullName)
Если у тебя Date3 объявлен с типом TimeSpan - то да, но с типом Date это не компилируется.
Теперь берём сумму. Сумма интервалов времени - логично. Сумма двух дат - бессмысленно. Естественно, это не работает.

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()
А если очень хочется пользоваться методом, а не оператором (хотя с такими желаниями надо на джаве писать), то он называется просто Add.

crabdance
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 10.01.2015 (Сб) 2:54

Re: Сложение времени, минут, секунд чохом: result="mm:ss"+"m

Сообщение crabdance » 10.01.2015 (Сб) 19:10

Ну какой, к дьяволу, таймспан?
===
Ладно, к чему суета по пустому? Ну не может васик складывать время как эксель, да и хрен с ним, будем складывать так, как он может.
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Сложение времени, минут, секунд чохом: result="mm:ss"+"m

Сообщение Mikle » 10.01.2015 (Сб) 20:01

Да, блин, прогресс... а в VB6 это работает:
Код: Выделить всё
  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
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 10.01.2015 (Сб) 22:27

Так это же не VB6. Добавили же специально временные промежутки - вот ими и надо пользоваться, а не вытворять всякие фокусы с датами.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Сложение времени, минут, секунд чохом: result="mm:ss"+"m

Сообщение Mikle » 10.01.2015 (Сб) 22:38

Дата - это тоже временной промежуток, время, прошедшее от условного нуля, так что глупости всё это.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 10.01.2015 (Сб) 22:54

Дата - это как точка, а промежуток - как расстояние.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Сложение времени, минут, секунд чохом: result="mm:ss"+"m

Сообщение Mikle » 10.01.2015 (Сб) 23:21

Qwertiy писал(а):Дата - это как точка

Но она численно равна расстоянию от нуля. Идентификатором точки служит расстояние, а расстояния можно складывать.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 10.01.2015 (Сб) 23:36

Mikle писал(а):Идентификатором точки служит расстояние, а расстояния можно складывать.

Я складываю 17 марта 2014 18:47:32 и 2 февраля 2015 12:16:37. Что я хочу получить и нафига мне это надо?
Если я складываю 2014 лет 76 дней 18 часов 47 минут 32 секунды и 2015 лет 33 дня 12 часов 16 минут 37 секунд, то результат вполне предсказуем. За исключением того, что я тут годы назвал, а у них нет однозначного представления в днях. Кстати, замечу, что в TimeSpan нет подозрительных единиц типа месяцев и лет.
Зачем тащить всякую логику с именованием месяцев, высокосностью, а главное, часовыми поясами туда, где надо просто посчитать сумму длительностей?

Mikle писал(а):а в VB6 это работает

Это работает только при соблюдении определённых ограничений.
А ещё, работа с численными представлениями дат там была не слишком-то корректна, если они по разную сторону от точки отсчёта и надо было использовать специальную функцию DateDiff - даже для дней.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Сложение времени, минут, секунд чохом: result="mm:ss"+"m

Сообщение Mikle » 11.01.2015 (Вс) 9:24

В принципе, соглашусь, если учитывать все эти неоднозначности и "подозрительные" единицы. Просто я до сих пор воспринимал тип Date, как точную величину, однозначно выражаемую в секундах (а ведь так и есть), а секунды мы можем складывать.

crabdance
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 10.01.2015 (Сб) 2:54

Re: Сложение времени, минут, секунд чохом: result="mm:ss"+"m

Сообщение crabdance » 11.01.2015 (Вс) 9:48

Qwertiy писал(а):
Mikle писал(а):Я складываю 17 марта 2014 18:47:32 и 2 февраля 2015 12:16:37. Что я хочу получить и нафига мне это надо?


Есть тип Date, есть DateTime, давайте напряжёмся, сделаем шажок и добавим тип Time! Вакаримас-ка?
Базар не за то, что хочется датами складывать, а за то, что вместо вменяемого способа предлагается некая костылища размером с .опищу, с беспрерывной конвертацией тудом-сюдом.
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 11.01.2015 (Вс) 11:51

Mikle писал(а):однозначно выражаемую в секундах (а ведь так и есть)

Она не в секундах. По крайней мере, вариант в VB6 дробный, да ещё и с нелогичным значением дробной части (это я про отрицательные даты).

crabdance писал(а):Есть тип Date, есть DateTime, давайте напряжёмся, сделаем шажок и добавим тип Time! Вакаримас-ка?

Что по сути и было сделано, только называется он TimeSpan ;) Вот почему там нет умножения - непонятно, а так - вполне логично.
А что касается Date и DateTime, то это одно и то же: VB.NET'овское ключевое слово Date означает тип System.DateTime.

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

Re:

Сообщение alibek » 11.01.2015 (Вс) 12:08

Qwertiy писал(а):Она не в секундах. По крайней мере, вариант в VB6 дробный, да ещё и с нелогичным значением дробной части (это я про отрицательные даты)

По сути — в секундах от 1970 года.
Целая часть — сутки, дробная часть — секунды; одна секунда = 1/86400 ≈ 0,000011574.
Но из-за того, что для хранения использован тип с плавающей запятой (double), при простом сложении/вычитании могут накопляться ошибки.
Lasciate ogni speranza, voi ch'entrate.

След.

Вернуться в Visual Basic .NET

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19

    TopList