Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как вычислить разницу двух Date в формате h:mm:ss / 25 сообщений из 27, страница 1 из 2
25.02.2015, 00:28
    #38887845
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вычислить разницу двух Date в формате h:mm:ss
В 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
25.02.2015, 00:47
    #38887854
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вычислить разницу двух Date в формате h:mm:ss
Разница между двумя датами - не есть дата. Разница - это разница, РАССТОЯНИЕ.
В VB6 это было сделано через ж...у, фактически, ты просто должен был понимать, что в основе лежит тупо числовое значение даты

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

ЗЫ: Забудь про функции, в .NET все делается методами класса, это удобней, проще, логичней и intellisens-нее
...
Рейтинг: 0 / 0
25.02.2015, 00:52
    #38887861
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вычислить разницу двух Date в формате h:mm:ss
грубо говоря (на шарпе):
Код: 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
25.02.2015, 00:56
    #38887866
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вычислить разницу двух Date в формате h:mm:ss
Код: c#
1.
diff.ToString(@"hh\:mm\:ss")
...
Рейтинг: 0 / 0
25.02.2015, 01:30
    #38887885
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вычислить разницу двух Date в формате h:mm:ss
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
25.02.2015, 01:39
    #38887888
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вычислить разницу двух Date в формате h:mm:ss
с учетом того, что операция вычитания для структуры DateTime перегружена, то это - то же самое

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

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


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

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

Код: 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
25.02.2015, 07:54
    #38887954
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вычислить разницу двух Date в формате h:mm:ss
hVosttС какого это перепугу не удовлетворяет?
В .Net 2-3.5 Нету этого перегруза
.ToString("format" as String)
...
Рейтинг: 0 / 0
25.02.2015, 08:57
    #38887970
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вычислить разницу двух Date в формате h:mm:ss
свойства TimeSpan - часы,минуты,секунды - доступны - сформатируй строку из них (одной строкой кода)
...
Рейтинг: 0 / 0
25.02.2015, 09:13
    #38887978
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вычислить разницу двух Date в формате h:mm:ss
Изопропилсвойства TimeSpan - часы,минуты,секунды - доступны - сформатируй строку из них (одной строкой кода)
А по-другому и не получится - во 2-м фреймворке TimeSpan не реализует IFormattable. Как в 3/3.5 - не смотрел.
...
Рейтинг: 0 / 0
25.02.2015, 09:33
    #38887995
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вычислить разницу двух Date в формате h:mm:ss
Сон Веры ПавловныИзопропилсвойства 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
25.02.2015, 10:25
    #38888042
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вычислить разницу двух Date в формате h:mm:ss
Arm79,

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

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

Строка не копируется в памяти при каждой конкатенации.
Так как стандартная функция Format использует StringBuilder.
То, что в .NET строки "immutable" - вам что-нибудь говорит?
...
Рейтинг: 0 / 0
25.02.2015, 16:35
    #38888699
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вычислить разницу двух Date в формате h:mm:ss
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
25.02.2015, 16:42
    #38888709
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вычислить разницу двух Date в формате h:mm:ss
Дмитрий77то одной строкой не получится
получится :)

Код: vbnet
1.
Public Function MyTimeSpanFormat(ByVal tsp As TimeStamp) As String
...
Рейтинг: 0 / 0
25.02.2015, 16:42
    #38888710
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вычислить разницу двух Date в формате h:mm:ss
Дмитрий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
25.02.2015, 16:45
    #38888714
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вычислить разницу двух Date в формате h:mm:ss
Я использую string.Format() всегда.
Хотя справедливости ради, нашелся случай, когда эта функция не может сделать то, что нужно.
:-)
...
Рейтинг: 0 / 0
25.02.2015, 17:42
    #38888788
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вычислить разницу двух Date в формате h:mm:ss
D129Дмитрий77И в чем преимущество? Кроме более модной записи формата?

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


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