2011-05-20 9 views
9

Chcę zapisać godziny pracy użytkownika w kolumnie bazy danych varchar, ale domyślnie sformatowana wartość obejmuje dni, jeśli liczba godzin jest większa niż 24. Chcę tylko całkowitą liczbę godzin.Jak sformatować przedział czasowy, aby wyświetlić łączną liczbę godzin?

Na przykład: jeśli użytkownik pracuje dziś 10:00:00, następnie 13:00:00 godziny jutro i 3:30:00 godziny pojutrze, to sformatowana wartość, którą chcę, jest 26:30: 00. Zamiast tego widzę 1,2: 30: 00.

Jak mogę uzyskać żądane formatowanie?

Ponadto, gdy ręcznie zapisuję wartość 40:00:00 w bazie danych i spróbuję ją później odczytać w postaci TimeSpan, otrzymuję błąd.

Jak mogę zapisać godziny w bazie danych w taki sposób, w jaki chcę, i nadal mogę odczytać je z powrotem w TimeSpan później?

+0

Pytasz o danych zawartych w bazie danych lub 'struktury TimeSpan' w plc? Twoje pytanie jest mylące. – Oded

+0

Zgodnie z sugestią [tutaj] (http://stackoverflow.com/a/744929/897326) najlepiej zapisywać znaczniki w bazie danych zamiast sformatowanego TimeSpan. Wtedy nie masz tego problemu. – Neolisk

+0

Głosuj na sugestię dotyczącą funkcji, a następnie poczekaj dziesięć lat, aby MS mogła się do niej dostać: http://visualstudio.uservoice.com/forums/121579-visual-studio-2015/suggestions/4050034-add-standard-formats-to -timespan-which-allow-the-f –

Odpowiedz

12

Spróbuj TimeSpan.TotalHours

String timeStamp = "40:00:00"; 
var segments = timeStamp.Split(':'); 

TimeSpan t = new TimeSpan(0, Convert.ToInt32(segments[0]), 
       Convert.ToInt32(segments[1]), Convert.ToInt32(segments[2])); 
string time = string.Format("{0}:{1}:{2}", 
      ((int) t.TotalHours), t.Minutes, t.Seconds); 
+0

@Bala dostaje coś takiego ... (40.166666663) (to jest przykład) i jak mogę przekonwertować to 40:00:00 na przedział czasowy? próbowałem timespan x = timespan.Parse ("40:00:00"); pojawia się błąd: – angel

+0

@ anangel 'TimeSpan.FromHours (40.0);' –

+0

@angel dla problemu 40.166666, możesz użyć TimeSpan.TotalHours jako integet, a następnie TimeSpan.Minutes i TimeSpan.Seconds, aby sformatować ciąg tak, jak chcesz. . –

10

Można zrobić coś takiego:

TimeSpan time = ...; 
string timeForDisplay = (int)time.TotalHours + time.ToString(@"\:mm\:ss"); 
+0

time = ??? i nie mogę napisać time = "40:00:00 "i nie mogę zanalizować go poważnie? – angel

+3

...' TimeSpan time = TimeSpan.FromHours (40) + TimeSpan.FromMinutes (30) ' – CodingWithSpike

+3

Lub jeszcze łatwiej:' TimeSpan time = new TimeSpan (40, 30, 0) 'http://msdn.microsoft.com/en-us/library/bk8a3558.aspx – CodingWithSpike