2012-10-01 93 views
27

Quiero mostrar en un cuadro de texto única horas y minutosConvertir TimeSpan de 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; 

cómo mostrar sólo horas y minutos "hh.mm"

+0

Un consejo sería echar un vistazo a [Roslyn CTP] (http://www.microsoft.com/en-us/download/details.aspx?id=34685) que he encontrado muy útil para probar el formateo en C# si está usando Visual Studio. – flindeberg

Respuesta

53

es necesario convertir sus datos a TimeSpan y luego utilizar el formato: "hh\:mm"

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

En su caso:

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

Recuerde escapar el colon :

Es posible que vea : Custom TimeSpan Format Strings

+0

para hh.mm Usé hh \.mm – Alex

+1

justo lo que estaba buscando, gracias @Habib – archie

+0

Si ocurre lo mismo en ASP .net no existen métodos como .Tostring() con aceptación de argumento. –

5

puede utilizar los métodos TimeSpan:

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

también puedes ver todos los formatos disponibles aquí http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

+5

No debería funcionar. Necesita escaparse de los puntos: ' – Habib

+0

TimeSpan.ToString no admite este formato. vea [esto] (http://msdn.microsoft.com/en-us/library/dd992632.aspx) – th1rdey3

+2

Esto es nuevo en .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

Si la entrada contiene el ':', fallará en el fomrat 'hh .mm' – Habib

7

Hay no es necesario convertir de hh.mm.ss a hh.mm. TimeSpan se almacena como un número de tics (1 tick == 100 nanosegundos). ¡Lo que tienes que hacer es convertir esta representación binaria interna en una cadena legible para humanos! Esto se llama formateo. Si no especifica un formato explícitamente, se usará un formato predeterminado. En este caso hh.mm.ss.

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

Nota: Esta sobrecarga de ToString existe desde .NET 4.0. ¡No admite símbolos separadores de marcador de fecha y hora! Por lo tanto, debe incluirlos como literales de cadena (escapados).

La forma habitual de formatear cadenas parece no funcionar por alguna extraña razón (probado con .NET 3.5). (No hace ninguna diferencia si escapas el símbolo separador o no):

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

Sin embargo, se puede construir la cadena como esta

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

o comenzar con VS2015/C# 6.0, usando cuerdas interpolación:

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

No olvide Math.Floor() en TotalHours. Sin esto 29,7h => Se convierte a 30:42 ... – ErazerBrecht

0

Las soluciones anteriores no se ejecutan si las horas> 24, probar esta solución si usted tiene tiempo en minutos muy grandes

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; 
Cuestiones relacionadas