Wie bekommt man Stunden und Minuten seitdem Date.getHoursund Date.getMinuteswurde veraltet? Die Beispiele, die ich in der Google-Suche gefunden habe, verwendeten die veralteten Methoden.
Versuchen Sie, Joda Time anstelle der Standardklassen java.util.Date zu verwenden. Die Joda Time-Bibliothek bietet eine viel bessere API für die Verarbeitung von Daten.
DateTime dt =newDateTime();// current timeint month = dt.getMonth();// gets the current monthint hours = dt.getHourOfDay();// gets hour of day
In dieser Frage finden Sie Vor- und Nachteile der Verwendung der Joda Time-Bibliothek.
Joda Time kann auch in einer zukünftigen Version von Java als Standardkomponente enthalten sein, siehe JSR-310 .
Wenn Sie die traditionellen Klassen java.util.Date und java.util.Calendar verwenden müssen, finden Sie Hilfe in den JavaDocs ( java.util.Calendar und java.util.Date ).
Sie können die traditionellen Klassen wie diese verwenden, um Felder von einer bestimmten Datumsinstanz abzurufen.
Date date =newDate();// given dateCalendar calendar =GregorianCalendar.getInstance();// creates a new calendar instance
calendar.setTime(date);// assigns calendar to given date
calendar.get(Calendar.HOUR_OF_DAY);// gets hour in 24h format
calendar.get(Calendar.HOUR);// gets hour in 12h format
calendar.get(Calendar.MONTH);// gets month number, NOTE this is zero based!
Diese schreckliche Klasse wurde vor Jahren durch die modernen java.time- Klassen mit der Einführung von JSR 310 ersetzt. Verwenden Sie ZonedDateTimestattdessen.
Basil Bourque
58
java.time
Während ich ein Fan von Joda-Time bin , stellt Java 8 das Paket java.time vor , das endlich eine lohnende Java-Standardlösung ist! In diesem Artikel, Java SE 8 Datum und Uhrzeit , finden Sie zahlreiche Informationen zu java.time außerhalb von Stunden und Minuten.
Schauen Sie sich insbesondere die LocalDateTimeKlasse an.
Dies ist die beste Antwort. Möglicherweise möchten Sie eine explizite Zeitzone angeben, um den Leser und sich selbst daran zu erinnern, dass dies eine zeitzonensensitive Operation ist : LocalDateTime.now(ZoneId.of("Asia/Manilla")). Aus now()Konsistenzgründen nur einmal lesen (zwischen den beiden Aufrufen vergeht die Zeit). Wenn das Datum wirklich irrelevant ist, LocalTimefunktioniert es auch.
Ole VV
1
Danke dafür. Ich habe diese wundervolle eingebaute Klasse irgendwie schon lange vermisst!
Chrips
Kommentar von Ole VV ist richtig. Aber noch besser, verwenden Sie ZonedDateTimelieber Klasse als LocalDateTime. Mit LocalDateTimeverwerfen Sie wertvolle Zeitzoneninformationen ohne Grund, ohne dass etwas gewonnen wird.
Basil Bourque
Nützlich, wenn Sie nicht abwärtskompatibel sein müssen. Leider nicht geeignet, wenn Sie für Android schreiben und ältere API-Versionen unterstützen (oder in einem anderen Fall, wenn Java 8 nicht immer verfügbar ist).
M_M
@M_M Für Java 6 und 7 wird der größte Teil der java.time- Funktionalität in der ThreeTen-Backport- Bibliothek zurückportiert . Weiter angepasst an frühes Android in ThreeTenABP . Links finden Sie im letzten Abschnitt meiner Antwort .
Basil Bourque
36
Importieren Sie zunächst java.util.Calendar
Calendar now =Calendar.getInstance();System.out.println(now.get(Calendar.HOUR_OF_DAY)+":"+ now.get(Calendar.MINUTE));
Die Antwort von JD ist gut, aber nicht optimal. Diese Antwort verwendet die LocalDateTimeKlasse. Ohne ein Konzept der Zeitzone oder des Versatzes von UTC kann diese Klasse keinen Moment darstellen.
ZoneId z =ZoneID.of("America/Montreal");ZonedDateTime zdt =ZonedDateTime.now( z );
Geben Sie die Zeitzone an
Wenn Sie das ZoneIdArgument weglassen , wird eines zur Laufzeit implizit unter Verwendung der aktuellen Standardzeitzone der JVM angewendet.
Also das:
ZonedDateTime.now()
… Ist das gleiche wie das:
ZonedDateTime.now(ZoneId.systemDefault())
Besser explizit sein und die gewünschte / erwartete Zeitzone überschreiten. Die Standardeinstellung kann sich jederzeit zur Laufzeit ändern .
Wenn kritisch, bestätigen Sie die Zeitzone mit dem Benutzer.
Stunde-Minute
Befragen Sie die ZonedDateTimefür die Stunde und Minute.
int hour = zdt.getHour();int minute = zdt.getMinute();
LocalTime
Wenn Sie nur die Tageszeit ohne Zeitzone wünschen, extrahieren Sie LocalTime.
LocalTime lt = zdt.toLocalTime();
Oder ZonedDateTimeganz überspringen und direkt zu gehen LocalTime.
LocalTime lt =LocalTime.now( z );// Capture the current time-of-day as seen in the wall-clock time used by the people of a particular region (a time zone).
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.
Das ThreeTen-Extra- Projekt erweitert java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Ergänzungen von java.time. Sie können einige nützliche Klassen hier wie finden Interval, YearWeek, YearQuarter, und mehr .
Versuchen Sie es mit Kalender. Verwenden Sie getInstance, um ein Kalenderobjekt zu erhalten. Verwenden Sie dann setTime, um das gewünschte Datum festzulegen. Jetzt können Sie get (int field) mit der entsprechenden Konstante wie HOUR_OF_DAY oder so verwenden, um die benötigten Werte zu lesen.
Ist das java.sql.Time? Sicherlich überhaupt kein Grund, diese veraltete Klasse ins Spiel zu bringen, wenn Sie haben java.time.LocalTime. Du bist zu kompliziert.
Ole VV
Sieht aus wie getMinutes()veraltet in (ich benutze Java 1.8) und wurde durchCalendar.get(Calendar.MINUTE)
Saltz3
3
Eine weitere Möglichkeit, Minuten und Stunden abzurufen, ist die Verwendung von SimpleDateFormat.
Ich hatte Angst, meinem dicken Projekt eine weitere Bibliothek hinzuzufügen, aber es ist einfach und schnell und intelligent und großartig. Außerdem spielt es sich in gewissem Maße gut mit vorhandenem Code.
Ich würde dies zwar nicht empfehlen, aber ich denke, es ist erwähnenswert, dass viele Methoden in java.util.Date zwar veraltet sind, aber dennoch funktionieren. In trivialen Situationen kann es in Ordnung sein, sie zu verwenden. Außerdem ist java.util.Calendar ziemlich langsam, sodass getMonth und getYear on Date möglicherweise schneller sind.
import java.util.*Sie können Stunden und Minuten mit Kalender- und Formatierungsklassen abrufen. Calendar cal = Calendar.getInstance()und Formatter fmt=new Formatter()und stellen Sie ein Format für die Anzeige von Stunde und Minute ein fmt.format("%tl:%M",cal,cal)und drucken Sie die System.out.println(fmt) Ausgabenshows wie10:12
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:
Versuchen Sie, Joda Time anstelle der Standardklassen java.util.Date zu verwenden. Die Joda Time-Bibliothek bietet eine viel bessere API für die Verarbeitung von Daten.
In dieser Frage finden Sie Vor- und Nachteile der Verwendung der Joda Time-Bibliothek.
Joda Time kann auch in einer zukünftigen Version von Java als Standardkomponente enthalten sein, siehe JSR-310 .
Wenn Sie die traditionellen Klassen java.util.Date und java.util.Calendar verwenden müssen, finden Sie Hilfe in den JavaDocs ( java.util.Calendar und java.util.Date ).
Sie können die traditionellen Klassen wie diese verwenden, um Felder von einer bestimmten Datumsinstanz abzurufen.
quelle
Aus dem Javadoc für Date.getHours
As of JDK version 1.1, replaced by Calendar.get(Calendar.HOUR_OF_DAY)
Also benutze
und das Äquivalent für getMinutes.
quelle
ZonedDateTime
stattdessen.java.time
Während ich ein Fan von Joda-Time bin , stellt Java 8 das Paket java.time vor , das endlich eine lohnende Java-Standardlösung ist! In diesem Artikel, Java SE 8 Datum und Uhrzeit , finden Sie zahlreiche Informationen zu java.time außerhalb von Stunden und Minuten.
Schauen Sie sich insbesondere die
LocalDateTime
Klasse an.Stunden und Minuten:
quelle
LocalDateTime.now(ZoneId.of("Asia/Manilla"))
. Ausnow()
Konsistenzgründen nur einmal lesen (zwischen den beiden Aufrufen vergeht die Zeit). Wenn das Datum wirklich irrelevant ist,LocalTime
funktioniert es auch.ZonedDateTime
lieber Klasse alsLocalDateTime
. MitLocalDateTime
verwerfen Sie wertvolle Zeitzoneninformationen ohne Grund, ohne dass etwas gewonnen wird.Importieren Sie zunächst java.util.Calendar
quelle
tl; dr
… oder …
ZonedDateTime
Die Antwort von JD ist gut, aber nicht optimal. Diese Antwort verwendet die
LocalDateTime
Klasse. Ohne ein Konzept der Zeitzone oder des Versatzes von UTC kann diese Klasse keinen Moment darstellen.Besser zu benutzen
ZonedDateTime
.Geben Sie die Zeitzone an
Wenn Sie das
ZoneId
Argument weglassen , wird eines zur Laufzeit implizit unter Verwendung der aktuellen Standardzeitzone der JVM angewendet.Also das:
… Ist das gleiche wie das:
Besser explizit sein und die gewünschte / erwartete Zeitzone überschreiten. Die Standardeinstellung kann sich jederzeit zur Laufzeit ändern .
Wenn kritisch, bestätigen Sie die Zeitzone mit dem Benutzer.
Stunde-Minute
Befragen Sie die
ZonedDateTime
für die Stunde und Minute.LocalTime
Wenn Sie nur die Tageszeit ohne Zeitzone wünschen, extrahieren Sie
LocalTime
.Oder
ZonedDateTime
ganz überspringen und direkt zu gehenLocalTime
.java.time- Typen
Ü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.Woher bekomme ich die java.time-Klassen?
Das ThreeTen-Extra- Projekt erweitert java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Ergänzungen von java.time. Sie können einige nützliche Klassen hier wie finden
Interval
,YearWeek
,YearQuarter
, und mehr .quelle
Versuchen Sie es mit Kalender. Verwenden Sie getInstance, um ein Kalenderobjekt zu erhalten. Verwenden Sie dann setTime, um das gewünschte Datum festzulegen. Jetzt können Sie get (int field) mit der entsprechenden Konstante wie HOUR_OF_DAY oder so verwenden, um die benötigten Werte zu lesen.
http://java.sun.com/javase/6/docs/api/java/util/Calendar.html
quelle
Diese Funktionen geben int-Werte in Stunden und Minuten zurück.
quelle
java.sql.Time
? Sicherlich überhaupt kein Grund, diese veraltete Klasse ins Spiel zu bringen, wenn Sie habenjava.time.LocalTime
. Du bist zu kompliziert.getMinutes()
veraltet in (ich benutze Java 1.8) und wurde durchCalendar.get(Calendar.MINUTE)
Eine weitere Möglichkeit, Minuten und Stunden abzurufen, ist die Verwendung von SimpleDateFormat.
quelle
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 .Ich würde empfehlen, ad joda Zeit zu suchen. http://www.joda.org/joda-time/
Ich hatte Angst, meinem dicken Projekt eine weitere Bibliothek hinzuzufügen, aber es ist einfach und schnell und intelligent und großartig. Außerdem spielt es sich in gewissem Maße gut mit vorhandenem Code.
quelle
Ich würde dies zwar nicht empfehlen, aber ich denke, es ist erwähnenswert, dass viele Methoden in java.util.Date zwar veraltet sind, aber dennoch funktionieren. In trivialen Situationen kann es in Ordnung sein, sie zu verwenden. Außerdem ist java.util.Calendar ziemlich langsam, sodass getMonth und getYear on Date möglicherweise schneller sind.
quelle
Das funktioniert bei mir
quelle
import java.util.*
Sie können Stunden und Minuten mit Kalender- und Formatierungsklassen abrufen.Calendar cal = Calendar.getInstance()
undFormatter fmt=new Formatter()
und stellen Sie ein Format für die Anzeige von Stunde und Minute einfmt.format("%tl:%M",cal,cal)
und drucken Sie dieSystem.out.println(fmt)
Ausgabenshows wie10:12
quelle