2012-04-18 9 views
5

Estoy seguro que esto debe ser simple, pero no puedo encontrar la manera de palabra correctamente en Google ...de análisis TimeSpan de cadena incluyendo el formato

Tengo una configuración que tiene un campo:

TimeToPoll="1d" 

Ahora quiero hacer algo como:

TimeSpan.Parse(TimeToPoll); 

la devolución de un intervalo de tiempo de un día.

En C#

EDIT: Busco un método de análisis que permite de "1d", así como "1s" o "1a", etc. ¿Es esto posible?

Significado:

 "1d" parses to {1.00:00:00} 
    "1h" parses to {0.01:00:00} 
    "1m" parses to {0.00:01:00} 
    "1s" parses to {0.00:00:01} 
+0

Mis disculpas, he actualizado. –

+0

por qué d en 'TimeToPoll' – Marshal

+0

revise este enlace: http://msdn.microsoft.com/en-us/library/system.timespan.days.aspx – Milee

Respuesta

0

El d no es necesario y es la razón falla el análisis.

var oneDay = TimeSpan.Parse("1"); 

Actualización:

Por lo que está buscando que hacer, no hay soporte nativo. Necesitarías escribir tu propio analizador.

+0

Esto necesitaría - TimeSpan.FromDays (double.Parse ("1")); –

+0

@MatthewCanty - No sigo. Lo que he escrito es válido. – Oded

+0

Ah, entonces sí. Lo siento. Simplemente no pensé que algo tan ambiguo podría suceder. Supuse que habría devuelto el menor valor posible. –

0

Debe almacenar sus valores en su archivo de configuración en uno de los formatos con los que puede trabajar TimeSpan.Parse. Hay varias muestras en esa página.

EDITAR: Los ejemplos están en el código hacia la parte inferior de la página.

4

Esta es mi resolución:

public static TimeSpan ConvertToTimeSpan(this string timeSpan) 
    { 
     var l = timeSpan.Length - 1; 
     var value = timeSpan.Substring(0, l); 
     var type = timeSpan.Substring(l, 1); 

     switch (type) 
     { 
      case "d": return TimeSpan.FromDays(double.Parse(value)); 
      case "h": return TimeSpan.FromHours(double.Parse(value)); 
      case "m": return TimeSpan.FromMinutes(double.Parse(value)); 
      case "s": return TimeSpan.FromSeconds(double.Parse(value)); 
      case "f": return TimeSpan.FromMilliseconds(double.Parse(value)); 
      case "z": return TimeSpan.FromTicks(long.Parse(value)); 
      default: return TimeSpan.FromDays(double.Parse(value)); 
     } 
    } 
Cuestiones relacionadas