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?

È stato utile?

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

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top