2012-10-01 19 views
27

chcę pokazać w polu tekstowym tylko godziny i minutyKonwersja Okres od formacie "hh: mm: ss" na "hh: mm"

var test = dataRow.Field<TimeSpan>("fstart").ToString(); 
//test ="08:00:00" 
var tb = (TextBox) gridViewRow.Cells[2].FindControl("fstart"); 
tb.Text = test; 

jak pokazują tylko godziny i minuty "hh.mm"

+0

Koniec końcówki, warto rzucić okiem na [Roslyn CTP] (http://www.microsoft.com/en-us/download/details.aspx?id=34685), który uznałem za bardzo przydatny do testowania formatowania w języku C#, jeśli używasz programu Visual Studio. – flindeberg

Odpowiedz

53

trzeba konwertować dane TimeSpan, a następnie użyć format: "hh\:mm"

string test ="08:00:00"; 
TimeSpan ts = TimeSpan.Parse(test); 
Console.Write(ts.ToString(@"hh\:mm")); 

W twoim przypadku:

var test = dataRow.Field<TimeSpan>("fstart").ToString(@"hh\:mm")); 

Pamiętaj, aby uciec okrężnicy :

Możesz zobaczyć : Custom TimeSpan Format Strings

+0

dla hh.mm Użyłem hh \.mm – Alex

+1

właśnie tego szukałem, dzięki @Habib – archie

+0

Jeśli to samo występuje w ASP .net, nie ma takich metod jak .Tostring() z akceptacją argumentu. –

5

można użyć metody Okres:

ToString("hh':'mm") 
// or 
ToString(@"hh\:mm") 

również sprawdzić wszystkie dostępne formaty tutaj http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

+5

Nie powinien działać. Musisz uciec przed dwukropkiem ':' – Habib

+0

TimeSpan.ToString nie obsługuje tego formatowania. zobacz [to] (http://msdn.microsoft.com/en-us/library/dd992632.aspx) – th1rdey3

+2

To jest nowe w .Net 4 – Basic

2
var test = dataRow.Field<TimeSpan>("fstart").ToString("hh.mm"); 
//test ="08:00" 
var tb = (TextBox) gridViewRow.Cells[2].FindControl("fstart"); 
tb.Text = test; 
+1

Jeśli dane wejściowe zawiera ':', nie powiedzie się na fomrat 'hh .mm' – Habib

7

Tam nie trzeba konwertować z hh.mm.ss na hh.mm. TimeSpan jest przechowywany jako liczba kleszczy (1 znacznik == 100 nanosekund). Co musisz zrobić, to przekonwertować tę wewnętrzną reprezentację binarną na ciąg czytelny dla człowieka! Nazywa się to formatowaniem. Jeśli nie określisz formatu, użyty zostanie format domyślny. W tym przypadku hh.mm.ss.

string formatted = timespan.ToString(@"hh\.mm"); 

Uwaga: To przeciążenie ToString istnieje od .NET 4.0. Nie obsługuje symboli separatora symboli daty i czasu! Dlatego należy je uwzględnić jako literały łańcuchowe (z uniknięciem).

Zwykły sposób formatowania łańcuchów wydaje się nie działać z jakiegoś dziwnego powodu (testowany z .NET 3.5). (To nie robi żadnej różnicy, czy uciec symbol separatora lub nie):

var timespan = TimeSpan.FromSeconds(1234); 
string formatted = String.Format("{0:hh.mm}", timespan); // ==> 00:20:34 

Jednak można skonstruować ciąg jak ten

string formatted = 
    String.Format("{0:00}.{1:00}", Math.Floor(timespan.TotalHours), timespan.Minutes); 

lub wychodząc z VS2015/C# 6.0, za pomocą znaków interpolacja:

string formatted = $"{Math.Floor(timespan.TotalHours):00}.{timespan.Minutes:00}"; 
+1

Nie zapomnij o Math.Floor() na TotalHours. Bez tego 29,7h => Pobiera przekonwertowane na 30:42 ... – ErazerBrecht

0

dotychczasowe rozwiązania nie działają, jeśli godzina> 24, spróbuj tego rozwiązania, jeśli masz czas w minutach bardzo dużych

int minutes = 159000; 
TimeSpan t = new TimeSpan(0, minutes, 0); 

String HOURS = Math.Round(t.TotalHours, 0).ToString(); 
if (HOURS.Length==1) 
{ 
    HOURS = "0"+HOURS; 
} 


String MINUTES = t.Minutes.ToString(); 
if (MINUTES.Length == 1) 
{ 
    MINUTES = "0" + MINUTES; 
} 


String RESULT = HOURS + ":" + MINUTES; 
Powiązane problemy