Frage

Jedes Mal wenn ich mit Datum arbeiten muß und / oder timstamps in Java Ich habe immer das Gefühl, dass ich etwas falsch und verbringe endlose Stunden machte versuchen, einen besseren Weg zu finden, der mit dem APIs arbeiten, ohne mein eigenes Datum kodieren und mit Zeit Utility-Klassen. Ist hier ein paar ärgerliche Dinge, die ich gerade lief in:

  • 0-basierte Monate. Mir ist klar, dass Best Practice ist Calendar.SEPTEMBER zu verwenden anstelle von 8, aber es ist ärgerlich, dass 8 für September und nicht August.

  • Wie Sie einen Termin ohne Zeitstempel. Ich brauche immer das Programm, das den Zeitstempel des Datums Zeros aus.

  • Ich weiß, dass es andere Probleme Ich habe in der Vergangenheit gehabt, kann aber nicht wieder zu verwenden. Fühlen Sie sich frei, um mehr in Ihren Antworten hinzuzufügen.

Also, meine Frage ist ... Was für Dritte APIs verwenden Sie Java Nutzung von Datum und Uhrzeit Manipulation, wenn überhaupt zu vereinfachen? Irgendwelche Gedanken über die Verwendung Joda ? Jeder sah näher an JSR-310 Datum und Uhrzeit API?

War es hilfreich?

Lösung

Dieser Beitrag hat eine gute Diskussion über die Java Date / Time API vs JODA auf dem Vergleich.

Ich persönlich benutze nur gregorianischen Kalender und Simple jederzeit ich muss manipulieren Daten / Zeiten in Java. Ich habe wirklich noch nie irgendwelche Probleme hatte die Java-API in Verwendung und finde es sehr einfach zu bedienen, haben also nicht wirklich in alle Alternativen gesucht.

Andere Tipps

java.time

Java 8 und später nun auch die java.time Rahmen. Inspiriert von Joda-Time , definiert durch JSR 310 , durch die ThreeTen-extra Projekt. Siehe Tutorial .

Dieser Rahmen verdrängt die alten java.util.Date/.Calendar Klassen. Konvertierungsmethoden können Sie konvertieren hin und her mit dem alten Code arbeiten noch nicht für die java.time Typen aktualisiert.

Die Kernklassen sind:

Dieses Framework löst das einige Probleme, die Sie aufgelistet.

0-basierte Monate

Monat Zahlen 1-12 in java.time.

Noch besser ist, ein Enum ( Month ) stellt eine Objektinstanz für jeder Monat des Jahres. So Sie hängen müssen nicht auf „magischen“ Zahlen im Code wie 9 oder 10.

if ( theMonth.equals ( Month.OCTOBER ) ) {  …

Darüber hinaus enthält das Enum einige praktische Hilfsmethoden wie einen Monat lokalisierte Namen bekommen.

Wenn noch nicht vertraut mit Java Aufzählungen, lesen Sie die Tutorial und studieren. Sie sind überraschend handlich und leistungsstark.

Ein Datum ohne Zeit

Die LocalDate Klasse stellt ein Datum-only-Wert, ohne Zeit-of-Tag, ohne Zeitzone.

LocalDate localDate = LocalDate.parse( "2015-01-02" );

Beachten Sie, dass ein Datum Bestimmung einer Zeitzone erfordert. Ein neuer Tag dämmert früher in Paris als in Montréal, wo es noch ‚gestern‘. Die ZoneId -Klasse stellt eine Zeitzone.

LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) );

In ähnlicher Weise gibt es ein LocalTime Klasse für einen Time-of-Tag noch nicht auf ein Datum oder Zeitzone gebunden.


Über java.time

Die java.time Rahmen in Java 8 und später gebaut. Diese Klassen verdrängen die störenden alten Vermächtnis Datum Zeitklassen rel="nofollow wie java.util.Date , Calendar & SimpleDateFormat .

Das Joda-Time Projekt nun in Wartungsmodus , rät Migration auf die java.time Klassen.

Um mehr zu erfahren, finden Sie in der Oracle Tutorial . Und Stack-Überlauf suchen viele Beispiele und Erklärungen. Spezifikation JSR 310 .

Wo die java.time Klassen erhalten?

Das ThreeTen-Extra Projekt erstreckt java.time mit zusätzlichen Klassen. Dieses Projekt ist eine Bewährungsprobe für eine mögliche zukünftige Ergänzungen java.time. Sie können einige nützliche Klassen hier wie Interval YearWeek , YearQuarter und mehr .

Das Apache Commons Lang-Projekt hat eine DateUtils Klasse, die hilfreich Datum Operationen durchführt.

Ich benutze DateUtils.truncate() eine Menge, welche Teile des Datums für Sie „nullen“ (hilfreich, wenn Sie Ihr Date-Objekt wollen, sagen wir, für ein Datum und keine Zeitinformationen enthalten). Jede Methode funktioniert sowohl für Date und Calendar Objekte auch.

http://commons.apache.org/lang/

Ich habe Joda benutzen ausschließlich seit drei Jahren und würde es auf jeden Fall empfehlen - es hat das ganze Gebiet mit einer Schnittstelle abgedeckt, dass ‚das tut, was er sagt.‘

Joda kann komplex aussehen, wenn Sie beginnen, wie zB es Konzepte von Perioden, die Dauer und Intervalle hat, die Art ähnlich aussehen, aber man kann einfach durch Ersetzen org.joda.time.DateTime (oder org.joda.time.DateMidnight) für java.util.Date in Ihrem Code beginnt, und Kleben mit die viele nützliche Methoden, die diese Klassen enthalten, bevor die anderen Bereiche zu verstehen.

Im mit GregorianCalendar - immer und überall. Einfache java.util.Date ist zu komplex, ja.

Also, mein Rat ist - Verwendung GC, seine einfache

Es ist das gleiche in Javascript. Jemand muss etwas worden sind Rauchen, wenn sie denken, dass es eine gute Idee, 2008 bedeutet das Jahr 2008 zu lassen, 31, um den 31. Tag im Monat bedeuten, und - das ist der beste Teil -. 11 der 12. Monat bedeuten

Auf der anderen Seite, sie haben es richtig auf zwei von drei.

Die Sache, die mich immer mit Java bekommt ist das Datum, Zeitbibliothek. Ich habe noch nie Joda verwendet, nur kurz es betrachtet, sieht aus wie seine eine ziemlich gute Umsetzung, und wenn ich JSR-130 richtig das Eingehen auf Wissen von Joda verstehen und schließlich mit ihm eingeschlossen in JavaSE.

Oft für vergangene Projekte habe ich die Java Datum Zeit Objekte gewickelt, die an sich eine schwierige Aufgabe war. Dann verwendet die Wrapper für Datum Manipulation.

Datum APIs sind sehr schwer zu entwerfen, besonders wenn sie mit Lokalisierung zu tun haben. Versuchen Sie, Ihre eigene Rolle und sehen, es lohnt sich mindestens einmal tun. Die Tatsache, dass Joda der Lage war, einen so guten Job zu tun, ist ein echter Kredit auf seinen Entwickler. Um Ihre Frage zu beantworten, ich habe nichts, aber gute Dinge über diese Bibliothek gehört, obwohl ich noch nie um spielte mit ihm selbst.

Viele Programmierer beginnen mit Datum verwenden, die zahlreiche veraltete ladenen Konstruktoren (was es schwierig macht zu verwenden) hat, aber wenn man GregorianCalendar heraus wird es ein wenig einfacher zu verwalten. Das Beispiel hier ist ziemlich hilfreich:

http: //java.sun .com / j2se / 1.4.2 / docs / api / java / util / GregorianCalendar.html

Es ist wirklich einfach Ihr eigenes Datum API zu schreiben, die auf der Oberseite des rohen Java-Klassen, Datums und Kalender sitzt. Grundsätzlich sowohl Datum und Kalender aus der Tatsache leiden, dass sie versuchen, zwei Konzepte in eine Klasse zu stopfen:

  1. Datum (d Jahr-Monat-Tag)
  2. Instant (d currentTimeMillis)

Wenn Sie das verstehen, es wird nur revolutionieren, wie Sie Datum artige Konzepte im Code behandeln. Die Dinge werden einfacher, klarer, besser sein. In jeder Hinsicht!

Für mich Joda ist zu kompliziert, zumindest für die überwältigende Mehrheit der Zwecke und ich vor allem nicht, wie die Tatsache, dass sie gegen Standard-Java-Formen gegangen sind, ein Beispiel dafür ist, wie sie zu analysieren und Datum-. Stephen Colebourne, der Typ hinter JODA, ist die Spezifikation Leitung von JSR-310 und diese leiden unter den gleichen Problemen imho (I befolgt habe und einen Beitrag zu den Diskussionen in den letzten Jahren).

Do it yourself; es ist einfach. Füllen Sie einfach die folgenden Klassen: MyDate (Einwickeln Jahr-Monat-Tag), Monat (eine Enumeration), TimeOfDay (Stunden-Minuten-sec-millis), DayOfWeek (ENUM), per Instant (eine lange Verpackung). Immer Zeitzonen berücksichtigen, wenn zwischen den Zeitpunkten und Daten zu konvertieren.

Wenn dies entmutigend scheint, können Sie Kalender und Simple unter der Haube verwenden. Sie werden an einem Tag tun dies und es nie bereuen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top