Java berechnen Tage im Jahr
Gibt es eine Methode in native Java-Klasse zu berechnen, wie viele Tage wurden/werden in einem bestimmten Jahr? Wie in, war es eine Schaltjahr (366 Tage) oder einem normalen Jahr (365 Tage)?
Oder muss ich es schreiben mich?
Bin ich der Berechnung der Anzahl der Tage zwischen zwei Datumsangaben, zum Beispiel, wie viele Tage bis zu meinem Geburtstag. Ich will zu berücksichtigen, den 29. Februar von Schaltjahren. Ich habe alles getan, außer, 29.
InformationsquelleAutor jurchiks | 2011-01-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
GregorianCalendar
standar-KlasseisLeapyear()
Methode. Wenn alles, was Sie haben ist ein Jahr Anzahl (sagen wir2008
), dann konstruieren Sie einen Termin mit diese Konstruktor, und dann überprüfen Sie dieisLeapYear()
Methode danach.Ja, die Verwendung von Bibliotheken für Daten SAUGT. Indem Sie Ihre eigenen tests für Schaltjahre, unterschiedlichen Monaten, Schaltsekunden, Additiv Mathe ist der Weg zu... nevermind. 🙂
Aber, dann kann man einfach definieren, "in dem MyCalendar" als neuen standard, und es würde auf Magische Weise passieren alle relevanten tests.
Nur die built-in-Datum Bibliotheken saugen. Fragen Jon Skeet darüber.
Ja, ich schrieb dies am späten Abend und ich vergaß zu erwähnen, dass ich den Kalender Klasse und der Kalender.get(Calendar.Felder day_of_year) um die Differenz zu ermitteln. Ich habe nur eine Frage - wenn ich, zum Beispiel, Kalender.hinzufügen(Kalender).MONAT, 14) Sie setzen die daraus resultierenden Jahr als ein Schaltjahr, wenn es eins ist? Oder alle Jahre nur 365 Tagen?
InformationsquelleAutor Marc B
Anderen Weg, es zu tun, ist zu Fragen, die
Calendar
Klasse für die eigentliche maximale Anzahl Tage in einem bestimmten Jahr:Zurückkehren 366 für eine bisestile Jahr, 365 für ein normal.
Anmerkung, die ich verwendet
getActualMaximum
stattgetMaximum
, die immer wieder 366.Tatsächlich, diese Antwort wurde überholt von Java 8 im Jahr 2014. Der lästige alte Datum-Zeit-Klassen wie
java.util.Date
,java.util.Calendar
, undjava.text.SimpleTextFormat
sind jetzt legacy, überlagert von der java.Zeit Klassen. Siehe Tutorial von Oracle.Ich bin damit einverstanden, dass, wenn überhaupt möglich, sollten Sie die java.Zeit-Klassen. Aber für diejenigen von uns, die don ' T haben den Luxus der Verwendung von Java 8 aber diese Antwort ist nicht mehr aktuell. Der OP bezog sich auf java.util.Calendar und java.util.Datum, und diese Antwort ist immer noch sehr zutreffend für viele von uns. Es war die Antwort, die ich suchte.
Viel von java.Funktionalität ist zurück-portiert auf Java 6 und Java 7 in der ThreeTen-Man Projekt. Weitere angepasst für Android in der ThreeTenABP Projekt. Es gibt also keinen Grund, zu leiden mit dem leidvollen Erbe
Date
/Calendar
/etc. Klassen. Siehe meine Antwort für details.InformationsquelleAutor Trasplazio Garzuglio
tl;dr
java.Zeit
In Java 8 und später haben wir die java.Zeit-Paket. (Tutorial)
length
Den
Year
- Klasse repräsentiert ein einzelnes Jahr Wert. Sie können befragen Sie seine Länge.isLeap
Können Sie auch Fragen, ob ein Jahr ein Schaltjahr ist oder nicht.
Als ein Beispiel, die Anzahl der Tage im Jahr mit Java ternärer operator, wie:
In unserem Fall wollen wir die Anzahl der Tage des Jahres. Das ist 365 für nicht-Schaltjahre, und 366 für Schaltjahre.
Tag-des-Jahres -
Können Sie die Tag-des-Jahres-Zahl für ein Datum. Diese Zahl läuft von 1 bis 365 oder 366 in einem Schaltjahr.
In die andere Richtung, ein Datum für einen Tag-des-Jahres.
Konnten Sie ermitteln, vergangene Tage durch den Vergleich diese Tag-des-Jahres-zahlen, wenn es mit einem einzigen Jahr. Aber es gibt einen einfacheren Weg; Lesen Sie weiter.
Verstrichenen Tage
Verwenden Sie die
ChronoUnit
enum zum berechnen der verstrichenen Tage.Automatisch verarbeitet Schaltjahr.
Über java.Zeit
Den java.Zeit framework ist in Java 8 und höher. Diese Klassen verdrängen die lästige alte Vermächtnis Datum-Zeit-Klassen wie
java.util.Date
,Calendar
, &" = SimpleDateFormat
.Den Joda-Time Projekt, jetzt in Wartungsmodus, rät der migration auf die java.Zeit Klassen.
Um mehr zu erfahren, siehe die Oracle Tutorial. Und die Suche Stack Overflow für viele Beispiele und Erklärungen. Spezifikation JSR 310.
Wo erhalten Sie die java.Zeit-Klassen?
Den ThreeTen-Extra Projekt erweitert die java.mal mit zusätzlicher Klassen. Dieses Projekt ist ein Testgelände für mögliche künftige Erweiterungen zu java.Zeit. Sie finden möglicherweise einige nützliche Klassen, die hier wie
Interval
,YearWeek
,YearQuarter
, und mehr.Sie, sir, gewinnen die Medaille ? Dank!
InformationsquelleAutor Basil Bourque
DateTime-Berechnungen empfehle ich mit der JodaTime Bibliothek. Für das, was Sie brauchen, vor allem, es wäre ein Einzeiler:
Ich hoffe, das hilft.
Nicht daran interessiert, die Durchführung eine ganze Bibliothek, die nur für Sie eine einfache Berechnung.
InformationsquelleAutor Matthew Sant
GregorianCalendar.isLeapYear(int Jahr)
InformationsquelleAutor brian_d
Kann man sich die Wikipedia-Seite für einige sehr schöne pseudocode:
Ich bin sicher, Sie können herausfinden, wie zu implementieren, die Logik in Java. 🙂
Ja, vereinbart, das ist, bevor ich wusste, über Java
GregorianCalendar
Klasse. Java ist VIELEN anderen Datum/Zeit-Fragen beiseite, das ist der Weg zu gehen in diesem Fall!warum der down-vote? Dies ist "der" Algorithmus zu finden, Schaltjahr.
Catikkas: Es ist sicher richtig, aber die Frage ist, "war es eine hilfreiche Antwort". Dies ist eine Java-Frage, damit ich sehen kann, ein argument für die Verwendung von Java-Bibliotheken wird eine bessere Antwort und das Rad neu erfinden, schlecht. Vielen Dank für die upvote! 🙂
InformationsquelleAutor Platinum Azure
Ihnen genaue Verwendung Fall sein könnte am besten gelöst mit Joda und diese spezifische Beispiel.
InformationsquelleAutor Jacob Tomaw
Können Sie die TimeUnit Klasse. Für Ihre spezifischen Anforderungen das sollten Sie tun:
Ehrlich, ich sehe nicht, wo Schaltjahren keine Rolle zu spielen in dieser Berechnung, aber. Vielleicht verpasste ich einen Aspekt deiner Frage?
Edit: mich Blöd an, die Schaltjahre Magie passiert in der
Date.getTime()
. Wie auch immer, du musst nicht befassen sich mit es auf diese Weise.InformationsquelleAutor Waldheinz