2016-07-29 18 views
0

Ist es möglich, ein Bereichsobjekt ähnlich der Interval-Klasse von Joda Time zu erstellen, wo Sie einen Start- und Enddatumswert ohne Berücksichtigung des Jahres eingeben können? Zum Beispiel möchte ich etwas in meinem Code tun, wenn ein Datum unabhängig vom Jahr vom 1. August bis zum 1. Dezember reicht.Erstellen Sie einen Datumsbereich in Joda Time ohne das Jahr?

+1

Natürlich ist es möglich. Dies sollte ziemlich einfach sein, sobald Sie sich entscheiden, wie die API aussieht. Hast du irgendwas probiert? Was genau ist deine Frage? –

+0

@JimGarrison Ja, ich habe versucht, die LocalDate-Klasse und die Interval-Klasse zu verwenden, aber sie benötigen einen Jahr-Parameter. Und ich werde prüfen, ob ein bestimmtes lokales Datum innerhalb dieses Bereichs liegt, aber wenn ein Jahrwert eingestellt ist, funktioniert es möglicherweise nicht, da die Jahre unterschiedlich sein können. –

+0

@JimGarrison Ich frage, wie das in Joda Time gemacht werden kann. Gibt es eine Klasse oder eine Funktion, die es mir erlaubt, einen Bereich festzulegen, ohne dass das Jahr involviert ist? Ich kann nichts über SO oder in seiner Dokumentation zu diesem Problem finden. –

Antwort

2

Joda-Time bietet einen MonthDay Typ, der ReadablePartial implementiert (siehe die Liste der Implementierungsklassen für mehr Arten von Teilzeiten). Sie können dies mit dem Typ Guava's Range kombinieren, um eine Reihe solcher Intervalle darzustellen.

Joda-Time enthält keine robuste Methode, um mit Partialtönen zu arbeiten; Ihre Optionen für Zeiträume sind Period, Interval, and Duration. Ich habe gefunden Range für solche Aufgaben jedoch sehr geeignet sein.

+0

Ich habe das gerade getestet und es funktioniert, wenn ich einen Bereich teste, der sich nicht in ein neues Jahr überschneidet. Allerdings muss ich in der Lage sein, einen Bereich von September bis Ende Januar zu testen, und wenn ich den Test durchführe, stürzt er dort ab, wo er am 31. Januar initialisiert wurde. So: 'Bereich mRegSeason = Range.closed (neuer MonthDay (9, 1), neuer MonthDay (1, 31));' Gibt es eine Arbeit, oder muss ich das mit dem Standardcode erklären? –

+0

Ja, der Januar kommt vor September. 'MonthDay' ist ein geordneter Typ, der nur Monate und Tage darstellt. Wenn Sie Jahre integrieren möchten, müssen Sie 'LocalDate' oder einen anderen Datumstyp verwenden. – dimo414