Konvertieren Sie DateTime in TimeSpan

73

Ich möchte eine DateTimeInstanz in eine TimeSpanInstanz konvertieren. Ist das möglich?

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

Ayoub.A
quelle

Antworten:

18

Um ein DateTimein ein zu konvertieren , TimeSpansollten Sie ein Basisdatum / eine Basiszeit auswählen - z. B. Mitternacht des 1. Januar 2000 - und es von Ihrem DateTimeWert abziehen (und es hinzufügen, wenn Sie zurück in konvertieren möchten DateTime).

Wenn Sie einfach a DateTimein eine Zahl konvertieren möchten, können Sie die TicksEigenschaft verwenden.

MiMo
quelle
207

Sie können einfach die TimeOfDay-Eigenschaft von Datum und Uhrzeit verwenden, die vom Typ TimeSpan ist:

DateTime.TimeOfDay

Diese Eigenschaft gibt es seit .NET 1.1

Weitere Informationen: http://msdn.microsoft.com/en-us/library/system.datetime.timeofday(v=vs.110).aspx

ale10ander
quelle
4
DateTime.Now.TimeOfDay || DateTime.Today.TimeOfDay
espaciomore
4
Um schmerzhaft und übermäßig klar zu sein, würden Sie DateTime myDateTime = DateTime.UtcNow;oder was auch immer verwenden, um etwas in eine bestimmte Instanz von zu bringenDateTime , dann können Sie verwenden myDateTime.TimeOfDay;. Alternativ können Sie den Mittelsmann ausschneiden und sagen DateTime.UtcNow.TimeOfDay, natch. (Das heißt, DateTime.TimeOfDayder aktuelle Beispielcode ist "ungültig" und gibt Ihnen keinen Wert auf die gleiche Weise DateTime.UtcNow, was Sinn macht. Sie benötigen einen bestimmten DateTime, um seinen TimeOfDayWert zu ermitteln.)
Ruffin
3
Ein Wort der Warnung. Wenn Sie diese Eigenschaft verwenden, erhalten Sie, und ich zitiere MSDN, ein "Zeitintervall, das den Bruchteil des Tages darstellt, der seit Mitternacht vergangen ist". Es kann Zeiten geben, in denen Sie sich nur um den aktuellen Tag kümmern. In anderen Fällen möchten Sie möglicherweise eine "absolute" Zeit erhalten (z. B. wenn Ihre Werte mehrere Tage oder Wochen umfassen). In diesem Fall wäre der Vorschlag von @ MiMo, eine Basis auszuwählen, angemessen.
Gustavo Mori
1
DateTime.TimeOfDay.ToString ("hh \\: mm") zum guten Formatieren.
JsonStatham
28
TimeSpan.FromTicks(DateTime.Now.Ticks)
KoalaBear
quelle
4
DateTime.TimeOfDay ist besser
Steve Chadbourne
19
Das hängt davon ab. TimeOfDayist nur die Uhrzeit und enthält nicht das aktuelle Datum in der TimeSpan.
KoalaBear
8

Versuchen Sie den folgenden Code.

 TimeSpan CurrentTime = DateTime.Now.TimeOfDay;

Holen Sie sich die Uhrzeit und weisen Sie sie der TimeSpanVariablen zu.

Muhammad Awais
quelle
4

Wenn Sie WPF und Xceeds TimePicker (der anscheinend DateTime verwendet?) Als Zeitspannenauswahl verwenden - wie ich es gerade tue -, können Sie die gesamten Millisekunden (oder eine Zeitspanne) wie folgt daraus abrufen:

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, können Sie mein DateTimeToTimeSpan () einfach so anpassen, dass es auch 'Tage' berücksichtigt oder etwas anderes tut dateTime.Substract(DateTime.MinValue).TotalMilliseconds.

Niemand
quelle