Ich habe eine Liste von LocalDate
-Elementen, die Gruppen von Startdaten und Enddaten darstellen.
Ich möchte in der Lage sein, Datumsbereiche zu speichern, so dass ich Operationen an ihnen als überlappende oder unterschiedliche Bereiche usw. ausführen kann.
Ich bin völlig neu bei NodaTime und nehme an, dass dies ein konzeptionelles Missverständnis meinerseits ist.
Update : Ich habe eine ähnliche Frage zu dem Thema von 2009, aber das scheint sich auf eine andere Utilies-Klasse zu beziehen; Ich gehe davon aus, dass sich NodaTime seitdem weiterentwickelt hat, um dieser Situation gerecht zu werden.
Noda Time stellt einen Interval
-Typ für einen Bereich von Instant
-Werten bereit, bietet jedoch keine Bereichsarten für die anderen Typen. Ein Teil des Grundes dafür ist die Nuance, wie Bereiche für verschiedene Typen verwendet werden.
Wenn ich Ihnen eine Auswahl an Zeitpunkten gebe, wird es immer als halboffenes Intervall behandelt. Der Startwert ist enthalten, aber der Endwert ist ausgeschlossen . Menschen machen das natürlich jedes Mal, wenn wir einen Zeitwert angeben, zum Beispiel wenn ich sage, dass ein Ereignis von 1:00
bis 2:00
läuft, ich meine eindeutig, dass das Ereignis über um 2:00 Uhr ist 2:00 ist ausgeschlossen.
Aber bei ganzen Kalenderzeiträumen sind die Enddaten typischerweise inklusive . Um den gesamten Monat Januar darzustellen (als eine Reihe von LocalDate
-Werten), würde ich wahrscheinlich den 1. Januar bis 31. Januar sagen, und ich füge den letzten Tag in seiner Gesamtheit hinzu.
Wir könnten wahrscheinlich einige zusätzliche Bereichstypen hinzufügen, um diese Dinge zu erzwingen, aber wir müssen darüber nachdenken, wie viel Wert es hat, sie in der API zu haben, wenn Sie sie wahrscheinlich nur nach Bedarf erstellen könnten. Ich sage nicht, dass ich dafür oder dagegen bin, aber das ist wahrscheinlich etwas, das in der Noda Time-Benutzergruppe diskutiert werden sollte .
Um Ihre spezifischen Fragen zu beantworten:
Die einzige andere Sache, die Sie beachten sollten, ist, dass Kalender-Mathe normalerweise über die Klasse Period
erfolgt. Um beispielsweise zu ermitteln, wie viele Tage zwischen zwei Kalenderdaten liegen:
Nein, es ist nichts falsch daran, eine Range-Klasse von lokalen Daten zu erstellen, da ist es vielleicht nicht sehr vorteilhaft. Das können Sie auch tun, wenn Sie zwei Eigenschaften, StartDate
und EndDate
, für Ihre eigenen Klassen haben. Seien Sie vorsichtig bei der Vollständigkeit der Enddaten, im Gegensatz zu der Exklusivität, die Sie mit einem Intervall oder einer Zeitspanne sehen würden.
Und schließlich sagten Sie:
... damit ich Operationen an ihnen als eine Reihe von überlappenden oder unterschiedlichen Bereichen usw. ausführen kann.
Sie suchen wahrscheinlich nach Operationen wie Überschneidung, Vereinigung, Berechnen von Lücken, Sortieren usw. Diese und mehr sind definiert durch Zeitraum Bibliothek , aber Noda Time hat derzeit nichts dergleichen. Wenn man es erstellen sollte, sollte es wahrscheinlich in einer begleitenden Bibliothek ("NodaTime.Ranges", vielleicht?) Sein. Wahrscheinlich wäre es nicht wünschenswert, es in den Kern zu ziehen, aber Sie wissen nie ...
Wenn Sie diese Zeitperiodenbibliothek verwenden, vergewissern Sie sich bitte, dass sie nur mit DateTime
funktioniert und dass DateTimeKind
nicht berücksichtigt wird. Um produktiv zu sein, sollten Sie also sicherstellen, dass Sie nur mit UTC-Werten oder "unspezifizierten" Kalenderterminen arbeiten, und versuchen Sie nicht, Dinge wie "wie viele Stunden sind an einem Tag" zu stellen, weil es so kommen wird Es ist falsch für Tage mit Sommerzeit Übergängen.