powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как вычислить разницу двух Date в формате h:mm:ss
25 сообщений из 27, страница 1 из 2
Как вычислить разницу двух Date в формате h:mm:ss
    #38887845
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В VB6 было грубо так:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
    Dim StartTime As Date
    Dim EndTime As Date
...
    StartTime = m_rs!start_datetime
    EndTime = m_rs!end_datetime
...
    str_duration = Format(CDate(EndTime - StartTime), "h:mm:ss")



Ругается на вычитание двух Date.
Невозможно преобразовать System.TimeSpan в Date.

Как правильно?
...
Рейтинг: 0 / 0
Как вычислить разницу двух Date в формате h:mm:ss
    #38887854
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разница между двумя датами - не есть дата. Разница - это разница, РАССТОЯНИЕ.
В VB6 это было сделано через ж...у, фактически, ты просто должен был понимать, что в основе лежит тупо числовое значение даты

В .NET разница между двумя датами - это другой тип - TimeSpan. Поэтому просто смотри на его свойства методы - в зависимости от того, что ты от него хочешь.

ЗЫ: Забудь про функции, в .NET все делается методами класса, это удобней, проще, логичней и intellisens-нее
...
Рейтинг: 0 / 0
Как вычислить разницу двух Date в формате h:mm:ss
    #38887861
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
грубо говоря (на шарпе):
Код: c#
1.
2.
3.
4.
5.
      DateTime a = DateTime.Now;
      DateTime b = DateTime.Now.AddMinutes(50);

      var diff = b.Subtract(a);
      Console.WriteLine(diff.ToString());
...
Рейтинг: 0 / 0
Как вычислить разницу двух Date в формате h:mm:ss
    #38887866
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
diff.ToString(@"hh\:mm\:ss")
...
Рейтинг: 0 / 0
Как вычислить разницу двух Date в формате h:mm:ss
    #38887885
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Что сказать, мудрено.
Мне надо.
В БД хранится start_time и end_time как дата/время, отображать надо duration(string)=end_time -start_time формата h:mm:ss (не может там больше 24 часов быть по определению, да и h обычно 0). Не догадался в свое время этот duration сразу считать и в БД хранить, поэтому считаю динамически.

На VB.Net вот так вроде эквивалент получился, @ не надо:
Код: vbnet
1.
str_duration = (EndTime - StartTime).ToString("h\:mm\:ss")


Сойдет?
Честно, не об этих мелочах счас голова болит.
...
Рейтинг: 0 / 0
Как вычислить разницу двух Date в формате h:mm:ss
    #38887888
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с учетом того, что операция вычитания для структуры DateTime перегружена, то это - то же самое

Я просто уже отвык использовать самостоятельные функции, использую исключительно методы типов. Даже для стандартных статических методов типа string.Join и string.Format делаю методы расширения, чтобы легко и непринужденно писать цепочки методов и не прыгать в начало цепочки заради применения какой-то функции. Такая запись гораздо легче читается слева направо - не приходится перечитывать строку, выискивать, где там закончилась скобка от функции Format, что снаружи, что внутри...
...
Рейтинг: 0 / 0
Как вычислить разницу двух Date в формате h:mm:ss
    #38887899
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProДаже для стандартных статических методов типа string.Join и string.Format делаю методы расширения, чтобы легко и непринужденно писать цепочки методов и не прыгать в начало цепочки заради применения какой-то функции. Такая запись гораздо легче читается слева направо - не приходится перечитывать строку, выискивать, где там закончилась скобка от функции Format, что снаружи, что внутри...

Статические методы стринга вообще неудачно спроектированы, особенно формат. Кажется как минимум половина программеров на шарпее пишут свои удобные экстеншены.
...
Рейтинг: 0 / 0
Как вычислить разницу двух Date в формате h:mm:ss
    #38887936
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
str_duration = (EndTime - StartTime).ToString("h\:mm\:ss")


Сойдет?
Не сойдет. Не удовлетворяет критерию обратной совместимости с Net 2-3.5.
Другое что-то надо.
...
Рейтинг: 0 / 0
Как вычислить разницу двух Date в формате h:mm:ss
    #38887951
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Не удовлетворяет критерию обратной совместимости с Net 2-3.5.

С какого это перепугу не удовлетворяет?
...
Рейтинг: 0 / 0
Как вычислить разницу двух Date в формате h:mm:ss
    #38887953
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так попытался:

Код: vbnet
1.
str_duration =Format(New Date((EndTime - StartTime).Ticks), "h:mm:ss")


Но он гад вместо 0:01:14 пишет 12 :01:14

Если не Format-ить, т.е.
Код: vbnet
1.
str_duration =New Date((EndTime - StartTime).Ticks)


то пишет 0 :01:14 но я б на такую автоматику не закладывался, на некоторых нац. системах может точки поставить а не двоеточья как разделители и хз чего еще.
А здесь мне надо четко h:mm:ss (0:00:16; 1:15:02; 10:00:01) с разделителем ' : '

М.б. свою ф-цию типа

Код: vbnet
1.
2.
3.
4.
  Private Function MyTimeDiff(ByVal startDate As Date, ByVal endDate As Date) As String
    Dim ts As TimeSpan = endDate - startDate
    Return ts.Hours.ToString & ":" & Format(ts.Minutes, "00") & ":" & Format(ts.Seconds, "00")
  End Function


Вроде фурычит как надо. Сойдет?

авторВ VB6 это было сделано через ж...у
Зато работало железно, а не через это самое место.
...
Рейтинг: 0 / 0
Как вычислить разницу двух Date в формате h:mm:ss
    #38887954
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttС какого это перепугу не удовлетворяет?
В .Net 2-3.5 Нету этого перегруза
.ToString("format" as String)
...
Рейтинг: 0 / 0
Как вычислить разницу двух Date в формате h:mm:ss
    #38887970
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
свойства TimeSpan - часы,минуты,секунды - доступны - сформатируй строку из них (одной строкой кода)
...
Рейтинг: 0 / 0
Как вычислить разницу двух Date в формате h:mm:ss
    #38887978
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилсвойства TimeSpan - часы,минуты,секунды - доступны - сформатируй строку из них (одной строкой кода)
А по-другому и не получится - во 2-м фреймворке TimeSpan не реализует IFormattable. Как в 3/3.5 - не смотрел.
...
Рейтинг: 0 / 0
Как вычислить разницу двух Date в формате h:mm:ss
    #38887995
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныИзопропилсвойства TimeSpan - часы,минуты,секунды - доступны - сформатируй строку из них (одной строкой кода)
А по-другому и не получится - во 2-м фреймворке TimeSpan не реализует IFormattable. Как в 3/3.5 - не смотрел.

У меня во втором фреймворке это работает:
Код: c#
1.
2.
3.
4.
5.
            DateTime startTime = new DateTime(2015, 2, 25, 9, 0, 3);
            DateTime finishTime = new DateTime(2015, 2, 25, 9, 15, 0);

            TimeSpan timeSpan = finishTime.Subtract(startTime);
            string requiredFormat = String.Format("{0}:{1}:{2}", timeSpan.Hours, timeSpan.Minutes, timeSpan.Seconds); 
...
Рейтинг: 0 / 0
Как вычислить разницу двух Date в формате h:mm:ss
    #38888042
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,

формат - "{0:D2}:{1:D2}:{2:D2}" наверное
...
Рейтинг: 0 / 0
Как вычислить разницу двух Date в формате h:mm:ss
    #38888052
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилArm79,

формат - "{0:D2}:{1:D2}:{2:D2}" наверное
{0}:{1:D2}:{2:D2} - так правильнее, "str_duration = Format(CDate(EndTime - StartTime), " h:mm:ss ")"
...
Рейтинг: 0 / 0
Как вычислить разницу двух Date в формате h:mm:ss
    #38888083
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79У меня во втором фреймворке это работает
Ну так я и написал, что только это и будет работать. Форматирование по маскам во втором фреймворке не работает, т.к. у TimeSpan не реализован IFormattable (а у int вполне реализован).
...
Рейтинг: 0 / 0
Как вычислить разницу двух Date в формате h:mm:ss
    #38888635
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилсвойства TimeSpan - часы,минуты,секунды - доступны - сформатируй строку из них

А я разве уже не сделал.
Дмитрий77свою ф-цию типа
Код: vbnet
1.
2.
3.
4.
  Private Function MyTimeDiff(ByVal startDate As Date, ByVal endDate As Date) As String
    Dim ts As TimeSpan = endDate - startDate
    Return ts.Hours.ToString & ":" & Format(ts.Minutes, "00") & ":" & Format(ts.Seconds, "00")
  End Function


можно как вы предлагаете:
Код: vbnet
1.
2.
3.
4.
  Public Function MyTimeDiff(ByVal startDate As Date, ByVal endDate As Date) As String
    Dim ts As TimeSpan = endDate - startDate
    Return String.Format("{0}:{1:D2}:{2:D2}", ts.Hours, ts.Minutes, ts.Seconds)
  End Function


И в чем преимущество? Кроме более модной записи формата?

Изопропил(одной строкой кода)
Если не вычислять (endDate - startDate)==endDate.Subtract(startDate) трижды что не есть гуд, то одной строкой не получится (одной конечно бы хотелось, не люблю для элементарщины функции или лишние переменные клепать).
...
Рейтинг: 0 / 0
Как вычислить разницу двух Date в формате h:mm:ss
    #38888655
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77И в чем преимущество? Кроме более модной записи формата?

Строка не копируется в памяти при каждой конкатенации.
Так как стандартная функция Format использует StringBuilder.
То, что в .NET строки "immutable" - вам что-нибудь говорит?
...
Рейтинг: 0 / 0
Как вычислить разницу двух Date в формате h:mm:ss
    #38888699
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D129,

Ответь лучше по-простому.
На этом варианте остановиться?
Код: vbnet
1.
2.
3.
4.
  Public Function MyTimeDiff(ByVal startDate As Date, ByVal endDate As Date) As String
    Dim ts As TimeSpan = endDate - startDate
    Return String.Format("{0}:{1:D2}:{2:D2}", ts.Hours, ts.Minutes, ts.Seconds)
  End Function
...
Рейтинг: 0 / 0
Как вычислить разницу двух Date в формате h:mm:ss
    #38888709
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77то одной строкой не получится
получится :)

Код: vbnet
1.
Public Function MyTimeSpanFormat(ByVal tsp As TimeStamp) As String
...
Рейтинг: 0 / 0
Как вычислить разницу двух Date в формате h:mm:ss
    #38888710
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77D129,

Ответь лучше по-простому.
На этом варианте остановиться?
Код: vbnet
1.
2.
3.
4.
  Public Function MyTimeDiff(ByVal startDate As Date, ByVal endDate As Date) As String
    Dim ts As TimeSpan = endDate - startDate
    Return String.Format("{0}:{1:D2}:{2:D2}", ts.Hours, ts.Minutes, ts.Seconds)
  End Function


Да.
...
Рейтинг: 0 / 0
Как вычислить разницу двух Date в формате h:mm:ss
    #38888714
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я использую string.Format() всегда.
Хотя справедливости ради, нашелся случай, когда эта функция не может сделать то, что нужно.
:-)
...
Рейтинг: 0 / 0
Как вычислить разницу двух Date в формате h:mm:ss
    #38888788
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D129Дмитрий77И в чем преимущество? Кроме более модной записи формата?

Строка не копируется в памяти при каждой конкатенации.
Так как стандартная функция Format использует StringBuilder.
То, что в .NET строки "immutable" - вам что-нибудь говорит?
Если бы всё было так просто .
Еще можно посмотреть обсуждение здесь: http://stackoverflow.com/questions/16432/string-output-format-or-concat-in-c
Люди достаточно обоснованно утверждают, что при небольших объемах сцепляемых строк конкатенация - быстрее, чем Format.
...
Рейтинг: 0 / 0
Как вычислить разницу двух Date в формате h:mm:ss
    #38888804
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловнычто при небольших объемах сцепляемых строк конкатенация - быстрее, чем Format.
они учитывали предварительные вызовы Format до конкатенации?
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как вычислить разницу двух Date в формате h:mm:ss
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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