2013-03-04 2 views
6

У меня был код, который хрустил много данных, поэтому я начал его в четверг и оставил его в выходные. В понедельник я вернулся и увидел, что он закончил. Я использовал функцию секундомера для отслеживания времени, в течение которого выполнялся код. Тем не менее, я закончил сСекундомер с истекшим выходом

Elapsed: 2.18:57:55.xxx 

Я понимаю, что это выход нормально H: M: SS, но не понимаю, первая цифра, тем более, что он работает уже в течение нескольких дней. Он просто конвертировал от часов к дням? Я оставил его так долго, что он сломался?

EDIT: Извините, я не имел в виду, что он закончился в понедельник. Я просто имел в виду, что к понедельнику (когда я вернулся к компьютеру) это было сделано.

+0

Ваш аппарат, возможно, приостановлен/спящий режим, когда ему больше нечего было делать? –

+0

Вы вызывали ToString() на выходе? –

+0

также: есть ли шанс, что вы действительно начали его в пятницу, а не в четверг? –

ответ

8

Да - это формат TimeSpan.ToString:

Возвращается строка форматируется с "с" спецификатор формата и имеет следующий формат:

[-] [. D] чч: мм : ss [.fffffff]

Элементы в квадратных скобках ([и]) могут не включаться в возвращаемую строку. Колонки и периоды (: и.) Являются буквальными символами. Нелитеральные элементы перечислены в следующей таблице. Обратите внимание, что строка, возвращаемая методом ToString(), не чувствительна к культуре.

Поскольку спецификатор формата не показывает полный час, вам нужно его вычислить. Если вы хотите, чтобы часы показывались как один номер, используйте:

TimeSpan ts = new TimeSpan(2,18,57,55); 

var output = string.Format("{0}:{1}", 
          ts.Days*24 + ts.Hours, 
          ts.ToString("mm\\:ss\\.ffff")); 

//output = `66:57:55.0000` 
+3

Если он начался в четверг и был отмечен в понедельник, в середине пятницы, субботы и воскресенья, мы ожидали бы «3.что», нет? –

+0

Его проще использовать 'ts.TotalHours' – SysDragon

+1

@SysDragon, за исключением TotalHours, включает дробную часть и округляется, если вы отформатируете его без десятичных знаков - вы можете усечь число, но действительно ли это будет проще? –

0

Ожидаемое поведение. Из документов для Timespan.ToString():

Возвращенной строка отформатирована с "с" спецификатором формата и имеет следующий формат:

[-] [г]. Чч: мм: сс [.fffffff]

«d» - количество дней в интервале времени. Этот элемент опущен, если временной интервал меньше одного дня.

+0

Если начался четверг и был отмечен в понедельник, в середине пятницы, субботы и воскресенья, мы ожидали бы «3.что», нет? –

+0

@MarcGravell Вопрос был неясным, но из обновлений ясно, что вопрос касается формата вывода, а не выходного значения :) –

Смежные вопросы