Как на самом деле работает следующий код относительно времени до даты? - PullRequest
0 голосов
/ 15 января 2011

У меня есть ЧЧ: мм: сс из базы данных с ЧЧ больше 100. У меня есть такие данные примерно для 3 строк.

Я хочу рассчитать общее количество шоу в формате ЧЧ: мм: сс.

Итак, я разделил это ЧЧ: мм: сс на секунду, и я получил всего секунду. И я так работаю.

TimeSpan t = TimeSpan.FromSeconds(TTTot); 
string answer="";
answer = string.Format("{0:D2}:{1:D2}:{2:D2}", t.Hours, t.Minutes, t.Seconds);
answer = string.Format("{0:D2}-{1:D2}:{2:D2}:{3:D2}", t.Days, t.Hours, t.Minutes, t.Seconds);    
answer = string.Format("{0:D5}:{1:D2}:{2:D2}",t.TotalHours, t.Minutes, t.Seconds);

Первая строка ответа - мой оригинальный код. Я видел только около 15 часов, в то время как в общей сложности около 130.

Итак, я перешел на вторую строку ответа, которая отображается вместе с днем. Это работает.

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

Invalid format exception

Интересно, как крутить, чтобы получить желаемый результат. ЧЧ: мм: сс с ЧЧ может b в сотнях значений.

1 Ответ

3 голосов
/ 15 января 2011

Эта страница библиотеки MSDN очень актуальна.Это говорит о спецификаторе формата D или d:

Спецификатор формата "D" (или десятичный) преобразует число в строку десятичных цифр (0-9) с префиксом знака минусесли число отрицательное. Этот формат поддерживается только для целочисленных типов .

Что является проблемой, TimeSpan.Hours возвращает значение double , а не целое значение, как TimeSpan. Минут делает.Вы можете решить эту проблему, усечив (не округляя) двойное значение, например:

answer = string.Format("{0:D5}:{1:D2}:{2:D2}",
   (int)t.TotalHours, t.Minutes, t.Seconds);
...