Domanda
Ho alcune stringhe di xxh:yym formato dove xx è ore e yy minuti come "05h:30m".Che cosa è un elegante modo per convertire una stringa di questo tipo di periodo di Tempo?
Soluzione
Questo sembra funzionare, anche se è un po ' hackish:
TimeSpan span;
if (TimeSpan.TryParse("05h:30m".Replace("m","").Replace("h",""), out span))
MessageBox.Show(span.ToString());
Altri suggerimenti
DateTime.ParseExact
o DateTime.TryParseExact
consente di specificare il formato esatto di ingresso.Dopo aver ottenuto l' DateTime
, si può prendere il DateTime.TimeOfDay
che è un TimeSpan
.
In assenza di TimeSpan.TryParseExact
, Penso di un 'elegante' soluzione è fuori dal mix.
@buyutec, Come si sospetta, questo metodo potrebbe non funzionare se il tempo si estende su più di 24 ore.
Qui c'e una possibilità:
TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1));
E se si vuole rendere più elegante il vostro codice, utilizzare un metodo di estensione:
public static TimeSpan ToTimeSpan(this string s)
{
TimeSpan t = TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1));
return t;
}
Quindi si può fare
"05h:30m".ToTimeSpan();
Da un altro thread:
Sono TimeSpan.Analizzare e TimeSpan.TryParse non le opzioni?Se non si utilizza un "approvato" formato, è necessario eseguire l'analisi manualmente.Probabilmente sarei catturare i vostri due valori interi in una espressione regolare, e quindi si tenta di analizzare in numeri interi, da lì si può creare un nuovo spazio di Tempo con il suo costruttore.