2016-07-09 10 views
1

Ich muss die Anzahl der Tage zwischen zwei Daten mit NodaTime berechnen, und es in einer Zeitzone zu tun.Wie bekomme ich die Anzahl der Tage zwischen zwei Daten in Nodatime

Die Endzeit ist datumsbasiert mit einer impliziten Zeit von Mitternacht am Ende des Tages. Dieses Datum befindet sich in einer Zeitzone.

Die Startzeit ist die aktuelle Zeit, aber ich übergebe sie in die Funktion, damit die Funktion testbar ist.

Ich versuchte mit der Periode, die wie die offensichtliche Antwort scheint, aber Period ist zu granular an einem Ende (wenn wir am Endtag sind) und nicht granular genug, wenn wir mehr als 1 Monat entfernt sind.

Also wenn jetzt der 9. Juli ist, 5:45 Uhr in Amerika/Toronto und die Endzeit ist 1. September, 00:00:00, dann möchte ich in der Lage sein, 54 Tage zu berechnen. (vorausgesetzt, ich habe die Anzahl der Tage in meinem Kalender richtig gezählt. :))

Ich dachte, ich würde das Sub-Day-Problem selbst bewältigen müssen, aber es überraschte mich, als ich herausfinden musste, wie man mit dem Größer als einem umgehen soll Monatsproblem.

Gibt es einen offensichtlichen Weg, die Anzahl der Tage zwischen zwei Zeiten von NodaTime zu bekommen? Ich habe es bis zu drei Zeilen Code mit .Net's DateTime und TimezoneInfo Klassen, aber ich möchte zu NodaTime für alle auf der Website angegebenen Gründen verschieben.

Dank

Antwort

3

ich den arithmetischen Abschnitt der docs haben sollte enger vor der Veröffentlichung gelesen.

Sie können angeben, mit welcher Einheit das mathematische Ergebnis mit einem dritten Parameter angezeigt werden soll. Hier ist das, was ich brauchte:

Period timeLeft = Period.Between(nowInTz.LocalDateTime, endDate, PeriodUnits.Days); 

das ist aus der Dokumentation: http://nodatime.org/unstable/userguide/arithmetic.html

hoffe, dies hilft jemand anders in der Zukunft.

+0

Eine Sache zu beachten, ist, dass, wenn Sie nach Tagen fragen und es gibt 1 Teil Tag übrig, erhalten Sie eine Periode mit allen Nullen. Die anderen Werte, wie Stunden werden nicht ausgefüllt. –

+0

Sie könnten immer einen Zeitraum mit Zeiteinheiten + Tagen verlangen, wenn der letzte Teil ein Problem für Sie darstellt. –

+0

Ah richtig kann ich oder die PeriodUnits. Das macht Sinn. Vielen Dank. –

Verwandte Themen