Wie kann ich die aktuelle Uhrzeit und das Datum in einer Android-App abrufen?
Antworten
Zu viele Anzeigen?Tl;dr
Instant.now() // Current moment in UTC.
oder
ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) // In a particular time zone
Einzelheiten
Die anderen Antworten sind zwar richtig, aber nicht mehr aktuell. Die alten Datum-Zeit-Klassen haben sich als schlecht konzipiert, verwirrend und problematisch erwiesen.
java.time
An die Stelle dieser alten Klassen sind die java.time Rahmen.
- Java 8 und höher: Die java.time Rahmenwerk ist eingebaut.
- Java 7 & 6: Verwenden Sie die Rückport von java.time .
- Android: Verwenden Sie diese verpackte Version dieses Backports .
Diese neuen Kurse sind inspiriert von dem sehr erfolgreichen Joda-Time Projekt, definiert durch JSR 310 und erweitert um die DreiZehn-Extra Projekt.
Siehe die Oracle-Tutorial .
Instant
Eine Instant
ist ein Moment auf der Zeitachse in UTC mit einer Auflösung bis zu Nanosekunden .
Instant instant = Instant.now(); // Current moment in UTC.
Zeitzone
Anwenden einer Zeitzone ( ZoneId
), um eine ZonedDateTime
. Wenn Sie die Zeitzone weglassen, wird implizit die aktuelle Standardzeitzone der JVM verwendet. Besser ist es, die gewünschte/erwartete Zeitzone explizit anzugeben.
Verwenden Sie richtige Namen für Zeitzonen im Format von continent/region
wie zum Beispiel America/Montreal
, Europe/Brussels
, oder Asia/Kolkata
. Verwenden Sie niemals 3-4-Buchstaben-Abkürzungen wie EST
o IST
da sie weder genormt noch eindeutig sind.
ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Or "Asia/Kolkata", "Europe/Paris", and so on.
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
Erzeugen von Zeichenketten
Sie können leicht eine String
als textuelle Darstellung des Datums-Zeit-Wertes. Sie können ein Standardformat, Ihr eigenes benutzerdefiniertes Format oder ein automatisch lokalisiertes Format verwenden.
ISO 8601
Sie können die toString
Methoden zur Formatierung von Text unter Verwendung der üblichen und sinnvollen ISO 8601 Standard.
String output = instant.toString();
2016-03-23T03:09:01.613Z
Beachten Sie, dass für ZonedDateTime
die toString
Methode erweitert den ISO 8601-Standard, indem sie den Namen der Zeitzone in eckigen Klammern anfügt. Äußerst nützliche und wichtige Informationen, aber kein Standard.
2016-03-22T20:09:01.613-08:00[America/Los_Angeles]
Benutzerdefiniertes Format
Oder geben Sie Ihr eigenes Formatierungsmuster mit der Option DateTimeFormatter
Klasse.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy hh:mm a" );
Geben Sie eine Locale
für eine menschliche Sprache (Englisch, Französisch usw.), um den Namen des Tages/Monats zu übersetzen und um kulturelle Normen wie die Reihenfolge von Jahr, Monat und Datum zu definieren. Beachten Sie, dass Locale
hat nichts mit der Zeitzone zu tun.
formatter = formatter.withLocale( Locale.US ); // Or Locale.CANADA_FRENCH or such.
String output = zdt.format( formatter );
Lokalisierung
Besser noch: Lassen Sie java.time die Arbeit der automatischen Lokalisierung übernehmen.
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.MEDIUM );
String output = zdt.format( formatter.withLocale( Locale.US ) ); // Or Locale.CANADA_FRENCH and so on.
Über java.time
En java.time Framework ist in Java 8 und höher integriert. Diese Klassen verdrängen die lästigen alten Erbe Datum-Zeit-Klassen wie java.util.Date
, Calendar
, & SimpleDateFormat
.
Weitere Informationen finden Sie in der Oracle-Tutorial . Auf Stack Overflow finden Sie viele Beispiele und Erklärungen. Spezifikation ist JSR 310 .
En Joda-Time Projekt, jetzt in Wartungsmodus rät zur Migration auf den java.time Klassen.
Sie können umtauschen java.time Objekte direkt mit Ihrer Datenbank. Verwenden Sie eine JDBC-Treiber übereinstimmend mit JDBC 4.2 oder später. Keine Notwendigkeit für Strings, keine Notwendigkeit für java.sql.*
Klassen. Unterstützung von Hibernate 5 und JPA 2.2 java.time .
Wo können die java.time-Klassen bezogen werden?
- Java SE 8 , Java SE 9 , Java SE 10 , Java SE 11 und später - Teil der Standard-Java-API mit einer gebündelten Implementierung.
- Java 9 brachte einige kleinere Funktionen und Korrekturen.
- Java SE 6 y Java SE 7
- Die meisten der java.time Funktionalität wird in Java 6 & 7 zurückportiert in DreiZehn-Backport .
- Android
- Spätere Versionen von Android (26+) bündeln Implementierungen der java.time Klassen.
- Bei älteren Android-Geräten (<26) ist der Prozess der API-Entzug bringt eine Teilmenge der java.time Funktionen, die ursprünglich nicht in Android integriert waren.
- Wenn das Desugaring nicht das bietet, was Sie brauchen, kann die DreiZehnABP Projekt passt sich an DreiZehn-Backport (siehe oben) auf Android übertragen. Siehe Wie benutzt man ThreeTenABP .
Versuchen Sie es mit der folgenden Methode. Alle Formate sind unten angegeben, um die Datums- und Zeitformate zu erhalten.
Calendar c = Calendar.getInstance();
SimpleDateFormat dateformat = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss aa");
String datetime = dateformat.format(c.getTime());
System.out.println(datetime);
Um die aktuelle Uhrzeit zu ändern, können Sie System.currentTimeMillis()
was in Java Standard ist. Dann können Sie es verwenden, um ein Datum zu erstellen
Date currentDate = new Date(System.currentTimeMillis());
Und wie bereits von anderen erwähnt, eine Zeit zu schaffen
Time currentTime = new Time();
currentTime.setToNow();
Y
Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = sdf.format(c.getTime());
Sortie :
2014-11-11 00:47:55
Y SimpleDateFormat
de aquí .