2012-09-19 23 views
22

Estoy usando .NET framework v 3.5 y necesito analizar una cadena que representa un intervalo de tiempo en el objeto TimeSpan.Analizar cadena en formato HH.mm a TimeSpan

El problema es que punto separador se utiliza en lugar de dos puntos ... Por ejemplo 13.00, o 22.30

Así que me pregunto si tengo que reemplazar . con : o hay una manera más limpia para obtener esto

+0

¿Se pueden publicar cadenas de ejemplo? – Oded

+0

Reemplazar sería mejor a menos que tenga fracciones de segundos – V4Vendetta

Respuesta

35

Analizar el DateTime y utilizar su propiedad TimeOfDay que es una estructura TimeSpan :

string s = "17.34"; 
var ts = DateTime.ParseExact(s, "HH.mm", CultureInfo.InvariantCulture).TimeOfDay; 
+1

¡Esta es la respuesta más relevante al problema!! – V4Vendetta

+1

+1 ¡Gracias! ¡Muy interesante! – davioooh

+0

@davioooh De nada, me alegra ayuda :) –

3
string YourString = "01.35"; 

var hours = Int32.Parse(YourString.Split('.')[0]); 
var minutes = Int32.Parse(YourString.Split('.')[1]); 

var ts = new TimeSpan(hours, minutes, 0); 
+1

¡Me gusta esta respuesta la mejor! –

7

respuesta Actualizado:

Desafortunadamente .NET 3 no permite personalizados TimeSpan formatos a ser utilizados, por lo que se quedan con hacer algo manualmente. Solo haré el reemplazo como sugieres.

Respuesta original (se aplica a .NET 4+ solamente):

Uso TimeSpan.ParseExact, especificando un custom format string:

var timeSpan = TimeSpan.ParseExact("11.35", "mm'.'ss", null); 
+2

Está usando .NET 3.5 –

+1

No 'ParseExact' en' 3.5' ​​:(!! – V4Vendetta

+0

@PaoloMoretti: Oops ... buscando alternativas – Jon

2

Para Net 3.5 puede usar DateTime.ParseExact y utilizar TimeOfDay propiedad

string timestring = "12.30"; 
TimeSpan ts = DateTime.ParseExact(
            timestring, 
            "HH.mm", 
            CultureInfo.InvariantCulture 
           ).TimeOfDay; 
+0

¡Esta solución es genial! Lo encontré por mi cuenta, pero es muy simple, ahora obtienes todas las opciones de formato de DateTime habituales que conocemos y amamos, y podemos usarlas para TimeSpan de la manera que esperábamos la primera vez. - Tenga en cuenta que obviamente no funcionará para Timespans más de 24 horas ... pero la mayoría de las veces he estado usando TimeSpan al integrarme con sistemas externos que rastrean fechas y horas por separado, por lo que nunca pasamos de las 23:59:59 :) –

0

probar esto (que trabajó para mí):

DateTime dt = Convert.ToDateTime(txtStartDate.Text).Add(DateTime.ParseExact(ddlStartTime.SelectedValue, "HH.mm", CultureInfo.InvariantCulture).TimeOfDay); 

startdate será una cadena como 28/02/2018 y ddlstarttime está en formato HH como 13.00

Cuestiones relacionadas