2012-04-18 17 views
5

Sono sicuro che questo deve essere semplice, ma non riesco a capire come parola correttamente in Google ...di analisi il periodo dal stringa di formato compreso

ho una configurazione che ha un campo:

TimeToPoll="1d" 

Ora voglio fare qualcosa di simile :

TimeSpan.Parse(TimeToPoll); 

Tornando un periodo di un giorno.

In C#

EDIT: Sto cercando un metodo che permette di parse "1D" e "1s" o "1A", ecc È possibile?

Significato:

 "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

Le mie scuse, ho aggiornato. –

+0

perché d in 'TimeToPoll' – Marshal

+0

controllare questo collegamento: http://msdn.microsoft.com/en-us/library/system.timespan.days.aspx – Milee

risposta

0

Il d non è necessaria ed è il motivo per il vostro parse non riesce.

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

Aggiornamento:

Per quello che si sta cercando di fare, non v'è alcun costruito a sostegno. Dovresti scrivere il tuo parser.

+0

Ciò avrebbe bisogno di - TimeSpan.FromDays (double.Parse ("1")); –

+0

@MatthewCanty - Non seguo. Quello che ho scritto è valido. – Oded

+0

Ah, così fa. Scusate. Non pensavo che potesse accadere qualcosa di così ambiguo. Presumo che avrebbe restituito il più piccolo valore possibile. –

0

È necessario memorizzare i valori nel file di configurazione in uno dei formati compatibili con TimeSpan.Parse. Ci sono molti esempi su quella pagina.

MODIFICA: gli esempi si trovano nel codice verso la fine della pagina.

4

Questa è la mia risoluzione:

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)); 
     } 
    }