Java: getMinutes und getHours

141

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.

rink.attendant.6
quelle
1
Zu Ihrer Information, die furchtbar mühsam Datum Zeitklassen wie java.util.Date, java.util.Calendarund java.text.SimpleDateFormatsind jetzt Erbe , durch die verdrängte java.time Klassen in Java gebaut 8 und höher. Siehe Tutorial von Oracle .
Basil Bourque

Antworten:

171

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 = new DateTime();  // current time
int month = dt.getMonth();     // gets the current month
int 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 = new Date();   // given date
Calendar 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!
Juha Syrjälä
quelle
2
Frage: Gibt es einen Grund, warum Sie Joda Time über LocalDateTime verwenden sollten, nachdem Java 8 mit LocalDateTime eingeführt wurde?
Chrips
@Chrips Meinungen gehen auseinander. Joda-Time empfiehlt offiziell die Verwendung von java.time.
Ole VV
96

Aus dem Javadoc für Date.getHours

As of JDK version 1.1, replaced by Calendar.get(Calendar.HOUR_OF_DAY)

Also benutze

Calendar rightNow = Calendar.getInstance();
int hour = rightNow.get(Calendar.HOUR_OF_DAY);

und das Äquivalent für getMinutes.

Kennzeichen
quelle
6
Also ... wie funktioniert das, wenn ich die Stunden von einem Datum erhalten möchte, das jetzt nicht entspricht?
Michael
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.

Stunden und Minuten:

LocalDateTime.now().getHour();
LocalDateTime.now().getMinute();
JD
quelle
4
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));
James
quelle
12

tl; dr

ZonedDateTime.now().getHour()

… oder …

LocalTime.now().getHour() 

ZonedDateTime

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.

Besser zu benutzen ZonedDateTime.

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).

java.time- Typen

Tabelle der Arten von Datums- und Uhrzeitklassen in modernem Java.time versus Legacy.


Ü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 .

Basil Bourque
quelle
6

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

Tobias Langner
quelle
3
int hr=Time.valueOf(LocalTime.now()).getHours();
int minutes=Time.valueOf(LocalTime.now()).getMinutes();

Diese Funktionen geben int-Werte in Stunden und Minuten zurück.

Nouran El Kassas
quelle
1
Duplikat. Dieser Ansatz wurde bereits in der Antwort von JD behandelt .
Basil Bourque
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.

SimpleDateFormat formatMinutes = new SimpleDateFormat("mm")
String getMinutes = formatMinutes.format(new Date())

SimpleDateFormat formatHours = new SimpleDateFormat("HH")
String getHours = formatHours.format(new Date())
Paka
quelle
Zu Ihrer Information, die furchtbar mühsam Datum Zeitklassen wie java.util.Date, java.util.Calendarund java.text.SimpleDateFormatsind jetzt Erbe , durch die verdrängte java.time Klassen in Java gebaut 8 und höher. Siehe Tutorial von Oracle .
Basil Bourque
2

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.

Alamar
quelle
1

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.

Skaffman
quelle
1
public static LocalTime time() {
    LocalTime ldt = java.time.LocalTime.now();

    ldt = ldt.truncatedTo(ChronoUnit.MINUTES);
    System.out.println(ldt);
    return ldt;
}

Das funktioniert bei mir

Huey
quelle
0

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

Benjamin
quelle