2012-10-01 18 views
27

Voglio mostrare in un controllo TextBox solo ora e minutiConvertire il periodo dal formato "hh: mm: ss" a "hh: mm"

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

come per mostrare solo le ore ei minuti "hh.mm"

+0

Un suggerimento sarebbe dare un'occhiata a [Roslyn CTP] (http://www.microsoft.com/en-us/download/details.aspx?id=34685) che ho trovato molto utile per testare la formattazione in C# se si utilizza Visual Studio. – flindeberg

risposta

53

è necessario convertire i vostri dati a TimeSpan e quindi utilizzare il formato: "hh\:mm"

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

Nel tuo caso:

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

Ricordati di sfuggire al colon :

Si può vedere : Custom TimeSpan Format Strings

+0

per hh.mm Ho usato hh \.mm – Alex

+1

proprio quello che stavo cercando, grazie @Habib – archie

+0

Se Same si verifica in ASP .net non ci sono metodi come .Tostring() con l'accettazione degli argomenti. –

5

È possibile utilizzare metodi TimeSpan:

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

controllare anche tutti i formati disponibili qui http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

+5

Non dovrebbe funzionare. È necessario sfuggire ai due punti ':' – Habib

+0

TimeSpan.ToString non supporta questa formattazione. vedere [questo] (http://msdn.microsoft.com/en-us/library/dd992632.aspx) – th1rdey3

+2

Questo è nuovo in .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

Se l'input contiene ':', fallirà su fomrat 'hh .mm' – Habib

7

Là non è necessario convertire da hh.mm.ss a hh.mm. TimeSpan viene memorizzato come un numero di tick (1 tick == 100 nanosecondi). Quello che devi fare è convertire questa rappresentazione binaria interna in una stringa leggibile dall'uomo! Questo è chiamato formattazione. Se non si specifica esplicitamente un formato, verrà utilizzato un formato predefinito. In questo caso hh.mm.ss.

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

Nota: Questo sovraccarico di ToString esiste dal .NET 4.0. Non supporta i simboli di separatore segnaposto di data e ora! Pertanto è necessario includerli come valori letterali di stringa (con escape).

Il solito modo di formattazione delle stringhe sembra non funzionare per qualche strano motivo (testato con .NET 3.5). (Non fa alcuna differenza se si sfuggire il simbolo di separazione o meno):

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

Tuttavia, è possibile costruire la stringa come questo

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

o iniziare con VS2015/C# 6.0, utilizzando stringa interpolazione:

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

Non dimenticare Math.Floor() su TotalHours. Senza questo 29,7h => Diventa convertito in 30:42 ... – ErazerBrecht

0

Le soluzioni precedenti non vengono eseguiti se ore> 24, provare questa soluzione se avete tempo in minuti molto grandi

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; 
Problemi correlati