Ich benötige ein Datumsobjekt für das Datum 2014-02-11. Ich kann es nicht direkt so erstellen,
Date myDate = new Date(2014, 02, 11);
Also mache ich wie folgt:
Calendar myCalendar = new GregorianCalendar(2014, 2, 11);
Date myDate = myCalendar.getTime();
Gibt es eine einfache Möglichkeit, ein Datumsobjekt in Java zu erstellen?
Date myDate = new GregorianCalendar(2014, 2, 11).getTime();
?02
. In Java bedeutet dies eher eine Oktalzahl (Basis-8) als eine Dezimalzahl (Basis-10).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:
Gotcha: Wenn Sie 2 als Monat übergeben, erhalten Sie möglicherweise ein unerwartetes Ergebnis: In der Kalender-API basiert der Monat auf Null. 2 bedeutet eigentlich März.
Ich weiß nicht, wonach Sie suchen, da ich der Meinung bin, dass die Verwendung des Kalenders bereits einfach genug ist.
Denken Sie daran, die richtigen Konstanten für den Monat zu verwenden:
Eine andere Möglichkeit besteht darin, DateFormat zu verwenden, das ich normalerweise wie folgt verwende:
damit ich einfach schreiben kann
Eine weitere Alternative, die ich bevorzuge: Verwenden Sie kein Java-Datum / Kalender mehr. Wechseln Sie zu JODA Time oder Java Time (auch bekannt als JSR310, verfügbar in JDK 8+). Sie können
LocalDate
ein Datum darstellen, das einfach von erstellt werden kannquelle
.toTime()
existiert nicht. Es sollte sein.getTime()
(siehe Java Docs )return new SimpleDateFormat("yyyy-mm-dd").parse(date)
sollte seinreturn new SimpleDateFormat("yyyy-MM-dd").parse(date)
tl; dr
Wenn Sie darauf bestehen, die schreckliche alte
java.util.Date
Klasse zu verwenden, konvertieren Sie von den modernen java.time- Klassen.Einzelheiten
Wenn Sie "einfach" möchten, sollten Sie das neue Paket java.time verwenden in Java 8 verwenden und nicht die notorisch problematischen Klassen java.util.Date & .Calendar, die mit Java gebündelt sind.
java.time
Die java.time in Java 8 und höher integrierte Framework ersetzt die problematischen alten Klassen java.util.Date/.Calendar.
Nur Datum
LocalDate
Von java.time wird eine Klasse angeboten, die einen Nur-Datum-Wert ohne Tageszeit oder Zeitzone darstellt. Sie benötigen eine Zeitzone, um ein Datum zu bestimmen, da in Paris ein neuer Tag früher beginnt als beispielsweise in Montréal. DieZoneId
Klasse ist für Zeitzonen.Dump zur Konsole:
Oder verwenden Sie eine Factory-Methode, um Jahr, Monat und Tag anzugeben.
Oder übergeben Sie eine Monatsnummer 1-12 anstelle eines
DayOfWeek
Aufzählungsobjekts.Zeitzone
A
LocalDate
hat keine wirkliche Bedeutung, bis Sie es in eine Zeitzone einstellen. In java.time wenden wir eine Zeitzone an, um einZonedDateTime
Objekt zu generieren . Das bedeutet auch eine Tageszeit, aber zu welcher Zeit? Normalerweise macht es Sinn, mit dem ersten Moment des Tages zu gehen. Sie könnten denken, dass dies die Zeit bedeutet00:00:00.000
, aber aufgrund der Sommerzeit (DST) und möglicherweise anderer Anomalien nicht immer wahr ist. Anstatt diese Zeit anzunehmen, bitten wir java.time, den ersten Moment des Tages durch einen Anruf zu bestimmenatStartOfDay
.Geben Sie einen richtigen Zeitzonennamen im Format
continent/region
, wie zum BeispielAmerica/Montreal
,Africa/Casablanca
oderPacific/Auckland
. Verwenden Sie niemals die Abkürzung mit 3-4 Buchstaben, daEST
oderIST
da es sich nicht um echte Zeitzonen handelt, die nicht standardisiert und nicht einmal eindeutig (!) Sind.koordinierte Weltzeit
Für Back-End-Arbeiten (Geschäftslogik, Datenbank, Datenspeicherung und -austausch) verwenden wir normalerweise die UTC- Zeitzone. In java.time
Instant
repräsentiert die Klasse einen Moment auf der Zeitachse in UTC. Ein Instant-Objekt kann durch Aufrufen aus einer ZonedDateTime extrahiert werdentoInstant
.Konvertieren
Sie sollten die Verwendung von
java.util.Date
class vollständig vermeiden . Wenn Sie jedoch mit altem Code zusammenarbeiten müssen, der für java.time noch nicht aktualisiert wurde , können Sie hin und her konvertieren. Suchen Sie nach neuen Konvertierungsmethoden, die zu den alten Klassen hinzugefügt wurden.…und…
Über java.time
Das java.time- Framework ist in Java 8 und höher integriert. Diese Klassen verdrängen die lästigen alten Legacy - Datum-Zeit - Klassen wie
java.util.Date
,Calendar
, &SimpleDateFormat
.Weitere Informationen finden Sie im Oracle-Lernprogramm . Suchen Sie im Stapelüberlauf nach vielen Beispielen und Erklärungen. Die Spezifikation ist JSR 310 .
Das Joda-Time- Projekt, das sich jetzt im Wartungsmodus befindet , empfiehlt die Migration zu den Klassen java.time .
Sie können java.time- Objekte direkt mit Ihrer Datenbank austauschen . Verwenden Sie einen JDBC-Treiber, der mit JDBC 4.2 oder höher kompatibel ist . Keine Notwendigkeit für Zeichenfolgen, keine Notwendigkeit für
java.sql.*
Klassen. Hibernate 5 und JPA 2.2 unterstützen java.time .Woher bekomme ich die java.time-Klassen?
UPDATE: Die Joda-Time- Bibliothek befindet sich jetzt im Wartungsmodus und empfiehlt die Migration zu den Klassen java.time . Ich lasse diesen Abschnitt für die Geschichte an Ort und Stelle.
Joda-Zeit
Zum einen verwendet Joda-Time eine sinnvolle Nummerierung, der Februar also
2
nicht1
. Eine andere Sache, eine Joda-Time DateTime kennt die zugewiesene Zeitzone wirklich, im Gegensatz zu einer java.util.Date, die eine Zeitzone zu haben scheint, dies aber nicht tut.Und vergessen Sie nicht die Zeitzone. Andernfalls erhalten Sie die Standardeinstellung der JVM.
Auf die Konsole werfen ...
Beim Laufen…
Umwandlung
Wenn Sie zur Verwendung mit anderen Klassen in ein java.util.Date konvertieren müssen…
quelle
new DateTime( 2014, 02, 11, 0, 0, timeZone );
Präfixieren von Nullen in Feldern wie ist wahrscheinlich nicht vorzuziehen. Obwohl es in diesem Fall funktioniert, aber wird es nicht für August und September kompiliert , wenn Sie vorbei08
und09
als ein int wörtlichen mit 0 bedeuten Oktal Präsentation prefixing. Es gibt Ihnen sogar unerwartete Werte für Jahre zuvor1000
, z. B.new DateTime( 0100, 02, 01, 0, 0, timeZone );
dass man erwarten kann, dass es 100AD ist, aber tatsächlich ist es 64ADIch denke, der beste Weg wäre, ein
SimpleDateFormat
Objekt zu verwenden.quelle
Von Java8:
quelle
Versuche dies
quelle
quelle
Calendar
und dieSimpleDateFormat
Klassen wurden vor Jahren durch die java.time- Klassen ersetzt. Die Verwendung im Jahr 2018 vorzuschlagen, ist ein schlechter Rat.Einfachste Wege:
quelle
java.sql.Date
Ihnen verwendete Klasse schlecht gestaltet und längst veraltet ist. Ich empfehle die VerwendungLocalDate
wie in der zweiten Zeile. Meine Gewohnheit istLocalDate.of(2000, Month.JANUARY, 1)
, ich finde es etwas klarer zu lesen.quelle
Ich denke dein Date kommt von PHP und ist in HTML (Dom) geschrieben oder? Ich habe eine PHP-Funktion, um alle Daten und Zeitstempel vorzubereiten. Dies gibt eine Formation zurück, die benötigt wird.
Dieses Format kann auf js verwendet werden, um ein neues Datum zu erstellen ...
Was ich sagen werde ist, machen Sie Ihre eigene Funktion zu wickeln, die Ihr Leben leichter macht. Sie können uns meine Funktion als Beispiel geben, aber in meinem CMS enthalten ist, können Sie nicht 1 zu 1 kopieren und einfügen :)
quelle