2013-03-04 15 views
6

Miałem kod, który zawierał dużo danych, więc zacząłem go w czwartek i zostawiłem uruchomiony przez weekend. W poniedziałek wróciłem i zobaczyłem, że to się skończyło. Użyłem funkcji stopera do śledzenia długości czasu, przez który przebiega kod. Jednak skończyło sięStoper, który upłynął, wyjście

Elapsed: 2.18:57:55.xxx 

Rozumiem, że jest to wyjście jest normalnie H: M: SS, ale nie rozumiem pierwszą cyfrę, zwłaszcza, że ​​został uruchomiony przez kilka dni. Czy po prostu przeliczało się z godzin na dni? Czy zostawiłem to tak długo, że się zepsuło?

EDYCJA: Przepraszam, nie miałem na myśli, że skończył się w poniedziałek. Chodziło mi tylko o to, że W poniedziałek (kiedy wróciłem do komputera), zostało to zrobione.

+0

czy Twój komputer prawdopodobnie zawiesił/hibernował, kiedy nie miał nic więcej do roboty? –

+0

Czy wywołasz ToString() na wyjściu? –

+0

również: czy jest jakaś szansa, że ​​zacząłeś to w piątek, a nie w czwartek? –

Odpowiedz

8

Tak - to format TimeSpan.ToString:

Zwracany ciąg jest sformatowany "C" formatu specyfikatora i ma następujący format:

[-] [d.] Hh: mm : ss [.fffffff]

Elementy w nawiasach kwadratowych ([i]) mogą nie występować w zwracanym ciągu. Dwójki i kropki (: i.) Są dosłownymi znakami. Elementy niedosłowne wymieniono w poniższej tabeli. Zwróć uwagę, że ciąg zwracany przez metodę ToString() nie jest wrażliwy na kulturę.

Ponieważ nie ma specyfikatora formatu, który pokazuje całkowite godziny, musisz go obliczyć. Jeśli chcesz, aby godziny były wyświetlane jako jeden numer, użyj:

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

Jeśli rozpoczniesz czwartek i sprawdziłeś w poniedziałek, w środku jest piątek, sobota i niedziela; spodziewalibyśmy się czegoś "3.something", nie? –

+0

Łatwiejszy w użyciu 'ts.TotalHours' – SysDragon

+1

@SysDragon oprócz tego, że TotalHours zawiera część ułamkową i może zaokrąglić w górę, jeśli sformatujesz ją bez miejsc dziesiętnych - możesz ją obciąć, ale czy to naprawdę będzie łatwiejsze? –

0

To oczekiwane zachowanie. Z Dokumenty do Timespan.ToString():

Zwrócona łańcuch jest sformatowane w formacie "c" specyfikacją i ma następujący format:

[-], [D]. HH: MM: ss [.fffffff]

"d" - liczba dni w przedziale czasu. Ten element jest pomijany, jeśli przedział czasu jest krótszy niż jeden dzień.

+0

Jeśli rozpoczęto czwartek i sprawdzono w poniedziałek, w środku jest piątek, sobota i niedziela; spodziewalibyśmy się czegoś "3.something", nie? –

+0

@MarcGravell Pytanie było niejasne, ale z aktualizacji wynika, że ​​pytanie dotyczy formatu wyjściowego, a nie wartości wyjściowej :) –

Powiązane problemy