2012-09-19 4 views
22

Parse Ich verwende .NET Framework v 3.5 und ich muss eine Zeichenfolge analysieren, die eine Zeitspanne in TimeSpan Objekt darstellt.Zeichenfolge im HH.mm Format zu TimeSpan

Das Problem ist, dass Punkt Separator statt Doppelpunkt verwendet wird ... Zum Beispiel 13.00 oder 22.30

Ich frage mich also, wenn ich . mit : ersetzen oder gibt es eine saubere Art und Weise um dies zu erreichen.

+0

Können Sie Beispielzeichenfolgen? – Oded

+0

Ersetzen wäre besser, es sei denn, Sie haben Sekundenbruchteile – V4Vendetta

Antwort

35

die DateTime Parse und verwenden seine TimeOfDay Eigenschaft, die eine ist TimeSpan Struktur :

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

Dies ist die relevanteste Antwort auf das Problem!! – V4Vendetta

+1

+1 Vielen Dank! Wirklich interessant! – davioooh

+0

@davioooh Gern geschehen, ich bin froh zu Hilfe :) –

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

Ich mag diese Antwort am besten! –

7

Aktualisiert Antwort:

Leider .NET 3 erlaubt keine individuelle TimeSpan Formate verwendet werden, so dass Sie etwas mit dem Tun von Hand gelassen werden. Ich würde nur den ersetzen, wie Sie vorschlagen.

Original-Antwort (gilt 4+ nur auf .NET):

Verwenden TimeSpan.ParseExact, eine Angabe custom format string:

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

Er verwendet .NET 3.5 –

+1

Nein 'ParseExact' in' 3.5' ​​:(!! – V4Vendetta

+0

@ PaoloMoretti: Ups ... Suche nach Alternativen. – Jon

2

Für .Net 3.5 Sie DateTime.ParseExact und TimeOfDay Eigenschaft verwenden

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

Diese Lösung rockt! Ich habe es alleine gefunden, aber es ist so einfach, jetzt erhalten Sie alle üblichen DateTime-Formatierungsoptionen, die wir kennen und lieben, und können sie für TimeSpan so verwenden, wie wir es beim ersten Mal erwartet hatten. - Beachten Sie, dass dies offensichtlich nicht für Zeitspannen von mehr als 24 Stunden funktioniert ... aber die meiste Zeit habe ich TimeSpan bei der Integration mit externen Systemen verwendet, die Daten und Zeiten getrennt verfolgen, also gehen wir nie über 23:59:59 hinaus :) –

0

versuchen diese (es funktionierte für mich):

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

startdate wird ein String wie 28/02 sein/2018 und ddlstarttime ist im HH-Format wie 13.00

Verwandte Themen