2013-07-30 12 views
38

Ich möchte eine DateTime Instanz in eine TimeSpan Instanz konvertieren, ist das möglich?Konvertieren von DateTime zu TimeSpan

Ich habe mich umgesehen, aber ich konnte nicht finden, was ich will, ich finde nur Zeitunterschied. Genauer gesagt möchte ich eine DateTime Instanz in Millisekunden konvertieren, um sie dann in einem IsolatedStorage zu speichern.

Antwort

11

Um eine DateTime in eine TimeSpan umzuwandeln, sollten Sie ein Basisdatum/-zeit wählen - z. Mitternacht des 1. Januar 2000, und subtrahieren Sie es von Ihrem DateTime Wert (und fügen Sie es hinzu, wenn Sie zurück in DateTime konvertieren möchten). Wenn Sie einfach eine DateTime in eine Zahl konvertieren möchten, können Sie die Ticks-Eigenschaft verwenden.

3

Falls Sie WPF und Xceeds TimePicker (der DateTime zu verwenden scheint) als Zeitspannen-Picker verwenden - so wie ich es jetzt tue - können Sie die gesamten Millisekunden (oder einen TimeSpan) folgendermaßen ausgeben:

var milliseconds = DateTimeToTimeSpan(timePicker.Value).TotalMilliseconds; 

    TimeSpan DateTimeToTimeSpan(DateTime? ts) 
    { 
     if (!ts.HasValue) return TimeSpan.Zero; 
     else return new TimeSpan(0, ts.Value.Hour, ts.Value.Minute, ts.Value.Second, ts.Value.Millisecond); 
    } 

XAML:

<Xceed:TimePicker x:Name="timePicker" Format="Custom" FormatString="H'h 'm'm 's's'" /> 

Wenn nicht, ich denke, man könnte nur meine DateTimeToTimeSpan einstellen(), so dass es auch 'Tage' berücksichtigt oder etw tun wie dateTime.Substract(DateTime.MinValue).TotalMilliseconds.

13
TimeSpan.FromTicks(DateTime.Now.Ticks) 
+2

DateTime.TimeOfDay ist besser –

+7

Das hängt davon ab. 'TimeOfDay' ist nur die Zeit und enthält nicht das aktuelle Datum in der' TimeSpan'. – KoalaBear

117

Sie können nur die TimeOfDay Eigenschaft Datum Zeit verwenden, die Timespan-Typ ist: http://msdn.microsoft.com/en-us/library/system.datetime.timeofday(v=vs.110).aspx

+2

Das ist eine viel bessere Antwort, danke. – Jeremy

+2

DateTime.Now.TimeOfDay || DateTime.Today.TimeOfDay – espaciomore

+3

Um schmerzhaft und übermäßig klar zu sein, würden Sie 'DateTime myDateTime = DateTime.UtcNow;' oder was auch immer verwenden, um etwas in eine * spezifische Instanz von 'DateTime' * zu bekommen, dann können Sie **' myDateTime verwenden .TimeOfDay; '**. Alternativ können Sie den Zwischenhändler ausschneiden und sagen: ** "DateTime.UtcNow.TimeOfDay" **, natch. (Das heißt, "DateTime.TimeOfDay", der aktuelle Beispielcode, ist "ungültig" & gibt Ihnen keinen Wert auf die gleiche Weise wie 'DateTime.UtcNow', was einen Sinn ergibt. Sie benötigen eine bestimmte' DateTime' um nimm seinen "TimeOfDay" -Wert.) – ruffin

2
:

DateTime.TimeOfDay 

Diese Eigenschaft um seit .NET 1.1

Weitere Informationen gewesen

Probieren Sie den folgenden Code aus.

TimeSpan CurrentTime = DateTime.Now.TimeOfDay; 

Die Uhrzeit ermitteln und der Variablen TimeSpan zuweisen.

Verwandte Themen