Woher wissen, wie viele Tage ein bestimmter Monat eines bestimmten Jahres hat?
String date = "2010-01-19";
String[] ymd = date.split("-");
int year = Integer.parseInt(ymd[0]);
int month = Integer.parseInt(ymd[1]);
int day = Integer.parseInt(ymd[2]);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR,year);
calendar.set(Calendar.MONTH,month);
int daysQty = calendar.getDaysNumber(); // Something like this
java.util.Date
,java.util.Calendar
undjava.text.SimpleDateFormat
sind jetzt Erbe , durch die verdrängte java.time Klassen in Java gebaut 8 und höher. Siehe Tutorial von Oracle .Antworten:
Java 8 und höher
@ Warren M. Nocos. Wenn Sie versuchen, die neue Datums- und Uhrzeit-API von Java 8 zu verwenden , können Sie
java.time.YearMonth
class verwenden. Siehe Oracle Tutorial .Test: Versuchen Sie einen Monat in einem Schaltjahr:
Java 7 und früher
Erstellen Sie einen Kalender, legen Sie Jahr und Monat fest und verwenden Sie
getActualMaximum
Test : Versuchen Sie einen Monat in einem Schaltjahr:
quelle
Code für java.util.Calendar
Wenn Sie verwenden müssen
java.util.Calendar
, vermute ich, dass Sie wollen:Code für Joda Time
Persönlich jedoch würde ich mit vorschlagen Joda Zeit statt
java.util.{Calendar, Date}
, um mit zu beginnen , in dem Fall , dass Sie verwenden:Beachten Sie, dass es besser ist, die Datums- / Uhrzeit-API abzurufen, die Sie zum Parsen verwenden, anstatt die Zeichenfolgenwerte einzeln zu analysieren. In
java.util.*
könnten Sie verwendenSimpleDateFormat
; in Joda Time würdest du a verwendenDateTimeFormatter
.quelle
Sie können folgende
Calendar.getActualMaximum
Methode verwenden:quelle
java.time.LocalDate
Ab Java 1.8 können Sie die Methode verwenden
lengthOfMonth
fürjava.time.LocalDate
:quelle
quelle
Dies ist der mathematische Weg:
Für Jahr, Monat (1 bis 12):
quelle
Ich würde mich für eine Lösung wie diese entscheiden:
Wenn der Monat nicht Februar ist (92% der Fälle), hängt er nur vom Monat ab und es ist effizienter, das Jahr nicht einzubeziehen. Auf diese Weise müssen Sie keine Logik aufrufen, um zu wissen, ob es sich um ein Schaltjahr handelt, und Sie müssen das Jahr in 92% der Fälle nicht ermitteln. Und es ist immer noch sauberer und gut lesbarer Code.
quelle
In Java8 können Sie Get ValueRange aus einem Datumsfeld verwenden.
Auf diese Weise können Sie auf dem Feld parametrieren.
quelle
So einfach ist das, Sie müssen nichts importieren
quelle
quelle
android.util.MonthDisplayHelper
)quelle
quelle
Die Verwendung veralteter
Calendar
API sollte vermieden werden.In Java8 oder einer höheren Version ist dies möglich
YearMonth
.Beispielcode:
quelle
Call requires API level 26 (current min is 21): java.time.YearMonth#lengthOfMonth
Machen wir es uns so einfach, wenn Sie den Wert von Jahr und Monat nicht fest codieren möchten und den Wert vom aktuellen Datum und der aktuellen Uhrzeit übernehmen möchten:
quelle
Sie können die Calendar.getActualMaximum-Methode verwenden:
Und Monat-1 ist wegen Monat nimmt seine ursprüngliche Anzahl von Monaten, während in Methode wie unten in Calendar.class argumentiert
Und das (int-Feld) ist wie folgt.
quelle
Die folgende Methode gibt Ihnen die Anzahl der Tage in einem bestimmten Monat an
quelle
Eine optimale und performante Varianz:
Weitere Details zum Sprungalgorithmus finden Sie hier
quelle
quelle
Das hat bei mir gut funktioniert.
Dies ist eine Beispielausgabe
quelle
quelle