Wie lassen sich die im Angelsächsischen üblichen Tageszeitkürzel AM und PM für eine gegebene Uhrzeit ermitteln?
Bis Java 7
Das Vorgehen bis zur Java-Version 7 wird in der Methode amOrPm()
demonstriert. Im Beispiel wird zunächst ein Objekt vom Typ
GregorianCalendar
erzeugt. Die Klasse
unterstützt das gregorianische und julianische
Kalendersystem gleichermaßen. Ihm wird wiederum ein Objekt
der Klasse java.util.Date
übergeben, das den
aktuellen Zeitpunkt in Millisekunden-Genauigkeit
repräsentiert. Es wird hierdurch mit dem aktuellen Kalender
verknüpft.
Die abstrakte Klasse Calendar
, von der GregorianCalendar
abgeleitet ist, definiert eine Vielzahl an Konstanten (besser:
finaler, statischer Variablen), die nun verwendet werden
können, um die gewünschten Datums- und Zeitangaben zu
ermitteln. Sie werden hierzu als Parameter der Methode get()
des GregorianCalendar
-Objektes übergeben.
Im Beispiel geschieht dies hier für die Tagesstunde in der
12-stündigen Angabe, die Minute und eben die AM/PM-Angabe.
Ist die 24-Stunden-Angabe gewünscht, so muss statt Calendar.HOUR
der Wert Calendar.HOUR_OF_DAY
verwendet werden,
selbstverständlich dann ohne AM/PM-Angabe.
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class AMorPM {
public static void main(String[] args) {
amOrPm();
amOrPmJava8();
}
private static void amOrPm() {
GregorianCalendar cal = (GregorianCalendar) GregorianCalendar
.getInstance();
Date time = new Date();
cal.setTime(time);
int h = cal.get(Calendar.HOUR);
int m = cal.get(Calendar.MINUTE);
if (cal.get(Calendar.AM_PM) == Calendar.AM)
System.out.println(h + ":" + m + "AM");
else
System.out.println(h + ":" + m + "PM");
}
private static void amOrPmJava8() {
LocalTime time = LocalTime.now();
DateTimeFormatter df = DateTimeFormatter.ofPattern("K:ma");
System.out.println(time.format(df));
}
}
Ab Java 8
v.8.0Die Methode amOrPmJava8()
zeigt das Vorgehen ab der Java-Version 8, in der die gesamte
Date-Time-API grundlegend umgestaltet wurde.
In diesem Fall
wird der aktuelle Zeitpunkt in Form eines LocalTime
-Objektes
durch die statische Methode now()
erzeugt und
anschließend durch einen DateTimeFormatter
formatiert. Hiezu wird zunächst ein solcher Formatierer mit
Hilfe eines Zeichen-Musters erzeugt, das als Parameter der
Methode ofPattern()
übergeben wird. Das hier
angegebene Muster K:ma
erzeugt eine
zusammengesetzte Ausgabe, bei der die beteiligten Zeichen
folgendes bedeuten:
K |
AM/PM-Stunde 0 - 11 |
m |
Minute |
a |
AM/PM-Angabe |
Einen Überblick über alle für die Formatierung
zur Verfügung stehenden Zeichen findet sich in den API Docs der Klasse DateTimeFormatter
.
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.