+1 Das war sehr hilfreich. Da wir neu sind, brauchen wir all diese kleinen Leckerbissen ... Ich benutze den Kalender, um das julianische Datum zu ermitteln. Viel einfacher als Millisekunden zu bekommen und herauszufinden, ob der Wert heute gleich ist;)
Bill Mote
9
Aber woher kommt das Datum und die Uhrzeit? das Android-Gerät selbst einstellen?
Kyle Clegg
12
@Kyle Ja, es basiert auf den Gerätezeiteinstellungen / Zeitzone. Zitat aus dem Dokument : "Die getInstance-Methode des Kalenders gibt einen Kalender zurück, dessen Gebietsschema auf Systemeinstellungen basiert und dessen Zeitfelder mit dem aktuellen Datum und der aktuellen Uhrzeit initialisiert wurden" - (über der ersten Beispielcodezeile in der Klassendokumentation).
3
+1 Diese Lösung hat eine Millisekundengenauigkeit, genau das, was ich brauchte.
Igor Zelaya
42
Wie @adamdport sagt, beantwortet dies die Frage nicht wirklich ... Calendar.getInstance().getTime()oder Calendar.getInstance().getTimeInMillis()wird funktionieren.
Die Zeitklasse ist ein schnellerer Ersatz für die Klassen java.util.Calendar und java.util.GregorianCalendar. Eine Instanz der Zeitklasse repräsentiert einen Zeitpunkt, der mit zweiter Genauigkeit angegeben wird.
ANMERKUNG 1:
Es ist einige Jahre her, seit ich diese Antwort geschrieben habe, und es handelt sich um eine alte, Android-spezifische und jetzt veraltete Klasse. Google sagt jetzt , dass "[t] seine Klasse eine Reihe von Problemen hat und es wird empfohlen, stattdessen GregorianCalendar zu verwenden".
ANMERKUNG 2: Obwohl die TimeKlasse über eine toMillis(ignoreDaylightSavings)Methode verfügt, ist dies nur eine Annehmlichkeit für Methoden, die Zeit in Millisekunden erwarten. Der Zeitwert ist nur auf eine Sekunde genau ; Der Millisekundenanteil ist immer 000. Wenn Sie in einer Schleife sind
Time time =newTime(); time.setToNow();Log.d("TIME TEST",Long.toString(time.toMillis(false)));...do something that takes more than one millisecond, but less than one second ...
Die resultierende Sequenz wiederholt denselben Wert, z. B. 1410543204000bis die nächste Sekunde begonnen hat. Zu diesem Zeitpunkt 1410543205000beginnt die Wiederholung.
@InsanityOnABun und Muhammad Babar. Nein nein Nein. Die Ärzte sagen "mit zweiter Genauigkeit angegeben". Selbst der einfachste Test (Abrufen der aktuellen Zeit in einer Schleife, toMillis und Protokollieren / Drucken des Ergebnisses) hätte Ihnen gezeigt, dass die resultierende Zeit 000 als Millisekunden-Teil hat!
ToolmakerSteve
3
@IgorZelaya Wenn Sie eine Millisekundengenauigkeit wünschen, verwenden Sie wahrscheinlich eher das Intervall-Timing als die Tageszeit. Android-Dokumente empfehlen SystemClock.uptimeMillis()für das Intervall-Timing. Da dies die meisten integrierten Funktionen verwenden, besteht eine starke Motivation dafür, dass es auf allen Geräten gut implementiert ist. Siehe Diskussion in SystemClock ... Wenn Sie dies mit der Uhrzeit korrelieren möchten, lesen Sie in onResume der App sowohl dies als auch Time / setToNow / toMillis. Denken Sie an den Unterschied zwischen diesen.
> Diese Klasse wurde in API-Level 22 nicht mehr unterstützt. Verwenden Sie stattdessen GregorianCalendar. Siehe hier
Neo
Eigentlich GregorianCalendarwurde vor Jahren in Java und später in Android durch die java.time- Klassen speziell ersetzt ZonedDateTime. Informationen zu früheren Android -Geräten finden Sie in den Projekten ThreeTen-Backport und ThreeTenABP .
Basil Bourque
366
Wenn Sie Datum und Uhrzeit in einem bestimmten Muster abrufen möchten, können Sie Folgendes verwenden:
Dies wird die Zeit in UTC geben, sollte in Zeitzonen übernommen werden.
Andras Balázs Lajtha
10
Beachten Sie, dass SimpleDateFormat problematisch sein kann, wenn die Leistung ein Problem darstellt. In meiner App hatte ich eine benutzerdefinierte Ansicht mit etwa 20 HH: MM-Beschriftungen, die bestimmte Zeiten darstellten (lange Ganzzahlen mit Millisekunden), und eine gleiche Anzahl von zeichnbaren Ressourcen. Erste Tests zeigten, dass die Wechselwirkung nicht so flüssig war, wie ich wollte. Als ich onDraw () profilierte, stellte ich fest, dass die SimpleTimeFormatter-Aufrufe 80% der Zeit in Anspruch nahmen. Tatsächlich lese ich diese Seite als Teil einer Suche nach einem effizienteren Formatierer und um mehr über Kalender usw. zu erfahren
William T. Mallard
3
Ja, aber nicht mehr. Ich erkannte den Overhead nicht und hatte angenommen, dass es so ziemlich ein POJO war.
William T. Mallard
32
Kurz gesagt:String currentDateandTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
Pratik Butani
4
Sie können sdf.setTimeZone(TimeZone.getDefault())in der Mitte einfügen
Harvey
231
Für diejenigen, die lieber ein benutzerdefiniertes Format bevorzugen, können Sie Folgendes verwenden:
DateFormat df =newSimpleDateFormat("EEE, d MMM yyyy, HH:mm");String date = df.format(Calendar.getInstance().getTime());
Während Sie DateFormat-Muster haben können wie:
"yyyy.MM.dd G 'at' HH:mm:ss z"----2001.07.04 AD at 12:08:56 PDT
"hh 'o''clock' a, zzzz"-----------12 o'clock PM, Pacific Daylight Time
"EEE, d MMM yyyy HH:mm:ss Z"------- Wed, 4 Jul 2001 12:08:56 -0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"------- 2001-07-04T12:08:56.235-0700
"yyMMddHHmmssZ"-------------------- 010704120856-0700
"K:mm a, z" ----------------------- 0:08 PM, PDT
"h:mm a" -------------------------- 12:08 PM
"EEE, MMM d, ''yy" ---------------- Wed, Jul 4, '01
Eigentlich ist es sicherer, die auf dem Gerät eingestellte aktuelle Zeitzone mit einzustellen Time.getCurrentTimezone(), sonst erhalten Sie die aktuelle Zeit in UTC.
Time today =newTime(Time.getCurrentTimezone());
today.setToNow();
Anschließend können Sie alle gewünschten Datumsfelder abrufen, z. B.:
textViewDay.setText(today.monthDay +"");// Day of the month (1-31)
textViewMonth.setText(today.month +"");// Month (0-11)
textViewYear.setText(today.year +"");// Year
textViewTime.setText(today.format("%k:%M:%S"));// Current time
Wie viele Leute darauf hinweisen, sagt Google, dass diese Klasse eine Reihe von Problemen hat und nicht mehr verwendet werden soll:
Diese Klasse weist eine Reihe von Problemen auf und es wird empfohlen, stattdessen GregorianCalendar zu verwenden.
Bekannte Probleme:
Aus historischen Gründen erfolgt bei der Durchführung von Zeitberechnungen derzeit die gesamte Arithmetik mit 32-Bit-Ganzzahlen. Dies begrenzt den zuverlässigen Zeitbereich, der von 1902 bis 2037 dargestellt werden kann. Weitere Informationen finden Sie im Wikipedia-Artikel zum Problem des Jahres 2038. Verlassen Sie sich nicht auf dieses Verhalten. es kann sich in Zukunft ändern. Das Aufrufen von switchTimezone (String) an einem Datum, das nicht vorhanden sein kann, z. B. einer Wandzeit, die aufgrund eines Sommerzeitübergangs übersprungen wurde, führt zu einem Datum im Jahr 1969 (dh -1 oder 1 Sekunde vor dem 1. Januar 1970 UTC). Ein Großteil der Formatierung / Analyse setzt ASCII-Text voraus und ist daher nicht für die Verwendung mit Nicht-ASCII-Skripten geeignet.
Ich habe das aktuelle Datum, den aktuellen Tag und die aktuelle Uhrzeit des Systems, aber die Zeit ändert sich nicht. Ich möchte die Zeit Sekunden um Sekunden erhöhen. Wie kann ich das tun?
ZonedDateTime.now(ZoneId.of("America/Montreal"))// In a particular time zone
Einzelheiten
Die anderen Antworten sind zwar korrekt, aber veraltet. Die alten Datums- und Uhrzeitklassen haben sich als schlecht gestaltet, verwirrend und problematisch erwiesen.
java.time
Diese alten Klassen wurden durch das Java.time- Framework ersetzt.
Java 8 und höher: Die java.time Framework ist integriert.
Diese neuen Klassen sind inspiriert von dem äußerst erfolgreichen Joda-Time- Projekt, das durch JSR 310 definiert und durch das ThreeTen-Extra- Projekt erweitert wurde.
Ein InstantMoment auf der Zeitachse in UTC mit einer Auflösung von bis zu Nanosekunden .
Instant instant =Instant.now();// Current moment in UTC.
Zeitzone
Wenden Sie eine Zeitzone ( ZoneId) an, um a zu erhalten ZonedDateTime. Wenn Sie die Zeitzone weglassen, wird implizit die aktuelle Standardzeitzone Ihrer JVM angewendet. Es ist besser, die gewünschte / erwartete Zeitzone explizit anzugeben.
ZoneId zoneId =ZoneId.of("America/Montreal");// Or "Asia/Kolkata", "Europe/Paris", and so on.ZonedDateTime zdt =ZonedDateTime.ofInstant( instant , zoneId );
Strings generieren
Sie können einfach Stringeine Textdarstellung des Datums- / Uhrzeitwerts generieren . Sie können ein Standardformat, ein eigenes benutzerdefiniertes Format oder ein automatisch lokalisiertes Format verwenden.
ISO 8601
Sie können die toStringMethoden aufrufen , um Text mit der üblichen und sinnvollen Norm ISO 8601 zu formatieren .
String output = instant.toString();
2016-03-23T03: 09: 01.613Z
Beachten Sie, dass ZonedDateTimedie toStringMethode den ISO 8601-Standard erweitert, indem der Name der Zeitzone in eckigen Klammern angehängt wird. Sehr nützliche und wichtige Informationen, aber nicht Standard.
Geben Sie a Localefür eine menschliche Sprache (Englisch, Französisch usw.) an, die bei der Übersetzung des Namens von Tag / Monat und bei der Definition kultureller Normen wie der Reihenfolge von Jahr, Monat und Datum verwendet werden soll. Beachten Sie, dass dies Localenichts mit der Zeitzone zu tun hat.
formatter = formatter.withLocale(Locale.US );// Or Locale.CANADA_FRENCH or such.String output = zdt.format( formatter );
Lokalisieren
Besser noch, lassen Sie java.time die Lokalisierung automatisch durchführen.
DateTimeFormatter formatter =DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM );String output = zdt.format( formatter.withLocale(Locale.US ));// Or Locale.CANADA_FRENCH and so on.
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ürjava.sql.* Klassen.
@ giraffe.guru Lies meine Antwort noch einmal. Sie haben die dritte Kugel verpasst. Ein Großteil der Funktionen von java.time wird in ThreeTen-Backport auf Java 6 & 7 zurückportiert und in ThreeTenABP weiter an Android angepasst .
Basil Bourque
Instant.now()und ZonedDateTime.now()ist erforderlich API 26
Ryde
2
@ Ryde Wie ich zu giraffe.guru sagte, lies meine Antwort noch einmal. Suchen Sie nach der dritten Kugel, in der "Android" erwähnt wird.
Basil Bourque
Ich glaube, Sie haben Recht: Ihre neue Tabelle java.time edition vermittelt die Nachricht direkter und einfacher als eine Aufzählungsliste. Wenn ich das wäre, würde ich die Sache wahrscheinlich etwas komplizierter machen und ein Häkchen in Klammern (oder ähnlichem) unter ThreeTenBackport / Java 8+ und auch unter ThreeTenABP / Android 26+ setzen, da diese Kombinationen funktionieren, nur gibt es kein Normalerweise macht es keinen Sinn, sie zu benutzen. Es werden Android-Apps entwickelt, die ThreeTenABP verwenden und auf eine Reihe von Android-API-Levels über und unter Level 26 abzielen. Mir scheint, dass die Entwickler in diesen Fällen eine gute Wahl treffen.
Ole VV
1
@ OleV.V. Vielen Dank, dass Sie ein sekundäres Häkchen in der Grafiktabelle vorgeschlagen haben. Ich habe das in späteren Versionen der Tabelle verwendet. Sehr verbessert.
Basil Bourque
52
Um die aktuelle Zeit zu ermitteln, können Sie System.currentTimeMillis()die in Java Standardzeit verwenden. Dann können Sie damit ein Datum erstellen
Date currentDate =newDate(System.currentTimeMillis());
Und wie von anderen erwähnt, um eine Zeit zu schaffen
Time currentTime =newTime();
currentTime.setToNow();
Keine Notwendigkeit für System.currentTimeMillis(); macht einfach new Date()das gleiche .
Jonik
@ Jonik Cannot resolve constructor Date()in Android, das Android SDK verwendet eine Mischung aus Java 6 und 7.
Surfer190
1
Vielen Dank. Date currentDate = new Date(System.currentTimeMillis());ist richtig
mghhgm
@mghhgm Nein, new Date(System.currentTimeMillis())nicht richtig: (a) es ist redundant, da das genau das gleiche ist wie new Date(). (b) Die problematische java.util.DateKlasse wird ab java.time.InstantJava 8 und höher ersetzt. Backportiert auf Java 6 & 7 im ThreeTen-Backport- Projekt und auf früheres Android (<26) in ThreeTenABP .
Basil Bourque
37
Sie können den Code verwenden:
Calendar c =Calendar.getInstance();SimpleDateFormat sdf =newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");String strDate = sdf.format(c.getTime());
Ausgabe:
2014-11-1100:47:55
Sie erhalten auch einige weitere Formatierungsoptionen für SimpleDateFormatvon hier .
Wie kann ich das Datum für die nächsten 5-10 Tage ermitteln? Ist es hier eine manuelle Berechnung?
CoDe
@CoDe Sie verwenden Datum dafür
FindOutIslamNow
27
Es gibt verschiedene Optionen, da Android hauptsächlich Java ist. Wenn Sie es jedoch in eine Textansicht schreiben möchten, reicht der folgende Code aus:
String currentDateTimeString =DateFormat.getDateInstance().format(newDate());// textView is the TextView view that should display it
textView.setText(currentDateTimeString);
Sie sollten Calendaroder verwenden GregorianCalendar. Die DateKlasse ist veraltet.
Joseph Earl
Danke Kumpel :) Ich hatte überhaupt keine Ahnung davon
dLobatog
12
Gemäß der Date-Dokumentation von Date () ( developer.android.com/reference/java/util/Date.html ) gibt es keinen Hinweis darauf, dass die Date () -Klasse veraltet ist. Einige Methoden und Konstruktoren sind jedoch veraltet.
Zac Seth
2
Dies führt zu einem falschen Ergebnis im Sinne der aktuellen Benutzereinstellungen (z. B. 12/24-Zeitformat). Verwenden Sie android.text.format.DateFormat.getTimeFormat (Kontextkontext), um DateFormat für die aktuellen Benutzereinstellungen abzurufen.
Wunder. Mäuse
@ Zac Sie haben Recht sogar getTime Methode von Datum ist noch mehr Verwendung voll
G Era designator (before christ, after christ)
y Year(e.g.12or2012).Use either yy or yyyy.
M Monthin year.Numberof M's determine length of format (e.g. MM, MMM or MMMMM)
d Day in month. Number of d's determine length of format (e.g. d or dd)
h Hourof day,1-12(AM / PM)(normally hh)
H Hourof day,0-23(normally HH)
m Minutein hour,0-59(normally mm)
s Secondin minute,0-59(normally ss)
S Millisecondin second,0-999(normally SSS)
E Dayin week (e.g Monday,Tuesday etc.)
D Dayin year (1-366)
F Dayof week in month (e.g.1stThursdayofDecember)
w Weekin year (1-53)
W Weekin month (0-5)
a AM / PM marker
k Hourin day (1-24, unlike HH's 0-23)
K Hour in day, AM / PM (0-11)
z Time Zone
Ich mag die enge Kopplung von Präsentationslogik und Prozesslogik nicht. Ich würde eine Methode bevorzugen, die nur die Formatierung durchführt und einen Datumseingabeparameter verwendet. Ich verstehe auch nicht, warum Sie 2 SimpleDateFormats & 2 Dates verwenden ... können Sie nicht einfach einmal "yyyy/MM/dd HH:mm"als Format- und Anrufkalender verwenden?
AjahnCharles
12
Time time =newTime();
time.setToNow();System.out.println("time: "+ time.hour+":"+time.minute);
Dies gibt Ihnen zum Beispiel 12:32.
Denken Sie daran, android.text.format.Time zu importieren.
if(Build.VERSION.SDK_INT >=Build.VERSION_CODES.O){
val current =LocalDateTime.now()
val formatter =DateTimeFormatter.ofPattern("dd.MM.yyyy. HH:mm:ss")var myDate:String= current.format(formatter)Log.d("Date","DATE : "+ myDate)}else{var date =Date()
val formatter =SimpleDateFormat("MMM dd yyyy HH:mma")
val myDate:String= formatter.format(date)Log.d("Date","DATE : "+ myDate)}
Datumsformatierungsmuster
"yyyy.MM.dd G 'at' HH:mm:ss z"----2001.07.04 AD at 12:08:56 PDT
"hh 'o''clock' a, zzzz"-----------12 o'clock PM, Pacific Daylight Time
"EEE, d MMM yyyy HH:mm:ss Z"------- Wed, 4 Jul 2001 12:08:56 -0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"------- 2001-07-04T12:08:56.235-0700
"yyMMddHHmmssZ"-------------------- 010704120856-0700
"K:mm a, z" ----------------------- 0:08 PM, PDT
"h:mm a" -------------------------- 12:08 PM
"EEE, MMM d, ''yy" ---------------- Wed, Jul 4, '01
Vielen Dank, dass Sie einen Beitrag leisten möchten. Tragen Sie etwas bei, das nicht bereits in den vorherigen 36 Antworten enthalten ist? In jedem Fall verwenden Sie immer noch die notorisch mühsame und längst veraltete SimpleDateFormatKlasse. Noch bevor Sie Oreo nicht benötigen, können Sie stattdessen ThreeTenABP verwenden , den Backport von java.time, der modernen Java-API für Datum und Uhrzeit.
Ole VV
11
Sie können auch android.os.SystemClock verwenden. Mit SystemClock.elapsedRealtime () erhalten Sie beispielsweise genauere Zeitangaben, wenn das Telefon schläft.
DateFormat df =newSimpleDateFormat("HH:mm");// Format timeString time = df.format(Calendar.getInstance().getTime());DateFormat df1 =newSimpleDateFormat("yyyy/MM/dd");// Format dateString date = df1.format(Calendar.getInstance().getTime());
Dies ist eine perfekte Einzeiler- und elegante Lösung. Das ist alles, was benötigt wird, nicht unnötig lange Lösungen wie in anderen Antworten.
Zeeshan
5
Die folgende Methode gibt das aktuelle Datum und die aktuelle Uhrzeit in String zurück. Verwenden Sie je nach tatsächlicher Zeitzone eine andere Zeitzone. Ich habe GMT verwendet
Sie sollten die Kalenderklasse gemäß der neuen API verwenden. Die Datumsklasse ist jetzt veraltet.
Calendar cal =Calendar.getInstance();String date =""+cal.get(Calendar.DATE)+"-"+(cal.get(Calendar.MONTH)+1)+"-"+cal.get(Calendar.YEAR);String time =""+cal.get(Calendar.HOUR_OF_DAY)+":"+cal.get(Calendar.MINUTE);
Date date =newDate();SimpleDateFormat dateFormatWithZone =newSimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",Locale.getDefault());String currentDate = dateFormatWithZone.format(date);
Antworten:
Du könntest benutzen:
Im Kalender gibt es viele Konstanten für alles, was Sie brauchen.
Bearbeiten:
Überprüfen Sie die Dokumentation der Kalenderklasse
quelle
Calendar.getInstance().getTime()
oderCalendar.getInstance().getTimeInMillis()
wird funktionieren.Sie können (sollten aber nicht mehr - siehe unten!) Android.text.format.Time verwenden :
Aus der oben verlinkten Referenz:
ANMERKUNG 1: Es ist einige Jahre her, seit ich diese Antwort geschrieben habe, und es handelt sich um eine alte, Android-spezifische und jetzt veraltete Klasse. Google sagt jetzt , dass "[t] seine Klasse eine Reihe von Problemen hat und es wird empfohlen, stattdessen GregorianCalendar zu verwenden".
ANMERKUNG 2: Obwohl die
Time
Klasse über einetoMillis(ignoreDaylightSavings)
Methode verfügt, ist dies nur eine Annehmlichkeit für Methoden, die Zeit in Millisekunden erwarten. Der Zeitwert ist nur auf eine Sekunde genau ; Der Millisekundenanteil ist immer000
. Wenn Sie in einer Schleife sindDie resultierende Sequenz wiederholt denselben Wert, z. B.
1410543204000
bis die nächste Sekunde begonnen hat. Zu diesem Zeitpunkt1410543205000
beginnt die Wiederholung.quelle
SystemClock.uptimeMillis()
für das Intervall-Timing. Da dies die meisten integrierten Funktionen verwenden, besteht eine starke Motivation dafür, dass es auf allen Geräten gut implementiert ist. Siehe Diskussion in SystemClock ... Wenn Sie dies mit der Uhrzeit korrelieren möchten, lesen Sie in onResume der App sowohl dies als auch Time / setToNow / toMillis. Denken Sie an den Unterschied zwischen diesen.GregorianCalendar
wurde vor Jahren in Java und später in Android durch die java.time- Klassen speziell ersetztZonedDateTime
. Informationen zu früheren Android -Geräten finden Sie in den Projekten ThreeTen-Backport und ThreeTenABP .Wenn Sie Datum und Uhrzeit in einem bestimmten Muster abrufen möchten, können Sie Folgendes verwenden:
Oder,
Datum :
Zeit:
quelle
String currentDateandTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
sdf.setTimeZone(TimeZone.getDefault())
in der Mitte einfügenFür diejenigen, die lieber ein benutzerdefiniertes Format bevorzugen, können Sie Folgendes verwenden:
Während Sie DateFormat-Muster haben können wie:
quelle
Eigentlich ist es sicherer, die auf dem Gerät eingestellte aktuelle Zeitzone mit einzustellen
Time.getCurrentTimezone()
, sonst erhalten Sie die aktuelle Zeit in UTC.Anschließend können Sie alle gewünschten Datumsfelder abrufen, z. B.:
Weitere Informationen finden Sie in der Klasse android.text.format.Time .
AKTUALISIEREN
Wie viele Leute darauf hinweisen, sagt Google, dass diese Klasse eine Reihe von Problemen hat und nicht mehr verwendet werden soll:
quelle
Verwenden Sie für das aktuelle Datum und die aktuelle Uhrzeit:
Welche Ausgänge:
quelle
Versuchen Sie es auf diese Weise. Alle Formate sind unten angegeben, um das Datums- und Uhrzeitformat zu erhalten.
quelle
tl; dr
…oder…
Einzelheiten
Die anderen Antworten sind zwar korrekt, aber veraltet. Die alten Datums- und Uhrzeitklassen haben sich als schlecht gestaltet, verwirrend und problematisch erwiesen.
java.time
Diese alten Klassen wurden durch das Java.time- Framework ersetzt.
Diese neuen Klassen sind inspiriert von dem äußerst erfolgreichen Joda-Time- Projekt, das durch JSR 310 definiert und durch das ThreeTen-Extra- Projekt erweitert wurde.
Siehe das Oracle-Tutorial .
Instant
Ein
Instant
Moment auf der Zeitachse in UTC mit einer Auflösung von bis zu Nanosekunden .Zeitzone
Wenden Sie eine Zeitzone (
ZoneId
) an, um a zu erhaltenZonedDateTime
. Wenn Sie die Zeitzone weglassen, wird implizit die aktuelle Standardzeitzone Ihrer JVM angewendet. Es ist besser, die gewünschte / erwartete Zeitzone explizit anzugeben.Verwenden Sie die richtige Zeitzone Namen im Format
continent/region
wieAmerica/Montreal
,Europe/Brussels
oderAsia/Kolkata
. Verwenden Sie niemals die Abkürzungen mit 3-4 Buchstaben, wieEST
oderIST
da sie weder standardisiert noch eindeutig sind.Strings generieren
Sie können einfach
String
eine Textdarstellung des Datums- / Uhrzeitwerts generieren . Sie können ein Standardformat, ein eigenes benutzerdefiniertes Format oder ein automatisch lokalisiertes Format verwenden.ISO 8601
Sie können die
toString
Methoden aufrufen , um Text mit der üblichen und sinnvollen Norm ISO 8601 zu formatieren .Beachten Sie, dass
ZonedDateTime
dietoString
Methode den ISO 8601-Standard erweitert, indem der Name der Zeitzone in eckigen Klammern angehängt wird. Sehr nützliche und wichtige Informationen, aber nicht Standard.Benutzerdefiniertes Format
Oder geben Sie Ihr eigenes Formatierungsmuster für die
DateTimeFormatter
Klasse an.Geben Sie a
Locale
für eine menschliche Sprache (Englisch, Französisch usw.) an, die bei der Übersetzung des Namens von Tag / Monat und bei der Definition kultureller Normen wie der Reihenfolge von Jahr, Monat und Datum verwendet werden soll. Beachten Sie, dass diesLocale
nichts mit der Zeitzone zu tun hat.Lokalisieren
Besser noch, lassen Sie java.time die Lokalisierung automatisch durchführen.
Ü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
.Das Joda-Time- Projekt, das sich jetzt im Wartungsmodus befindet , empfiehlt die Migration auf java.time Klassen .
Weitere Informationen finden Sie im Oracle-Lernprogramm . Suchen Sie im Stapelüberlauf nach vielen Beispielen und Erklärungen. Die Spezifikation ist JSR 310 .
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?
quelle
Instant.now()
undZonedDateTime.now()
ist erforderlich API 26Um die aktuelle Zeit zu ermitteln, können Sie
System.currentTimeMillis()
die in Java Standardzeit verwenden. Dann können Sie damit ein Datum erstellenUnd wie von anderen erwähnt, um eine Zeit zu schaffen
quelle
System.currentTimeMillis()
; macht einfachnew Date()
das gleiche .Cannot resolve constructor Date()
in Android, das Android SDK verwendet eine Mischung aus Java 6 und 7.Date currentDate = new Date(System.currentTimeMillis());
ist richtignew Date(System.currentTimeMillis())
nicht richtig: (a) es ist redundant, da das genau das gleiche ist wienew Date()
. (b) Die problematischejava.util.Date
Klasse wird abjava.time.Instant
Java 8 und höher ersetzt. Backportiert auf Java 6 & 7 im ThreeTen-Backport- Projekt und auf früheres Android (<26) in ThreeTenABP .Sie können den Code verwenden:
Ausgabe:
Sie erhalten auch einige weitere Formatierungsoptionen für
SimpleDateFormat
von hier .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 .Ganz einfach: Sie können die Zeit wie folgt analysieren, um separate Werte für die aktuelle Zeit zu erhalten:
Gleiches gilt für das Datum wie folgt:
quelle
Es gibt verschiedene Optionen, da Android hauptsächlich Java ist. Wenn Sie es jedoch in eine Textansicht schreiben möchten, reicht der folgende Code aus:
quelle
Calendar
oder verwendenGregorianCalendar
. DieDate
Klasse ist veraltet.Datumsformat Muster
quelle
quelle
Dies ist eine Methode, mit der Sie Datum und Uhrzeit ermitteln können:
Sie können diese Methode aufrufen und die aktuellen Datums- und Uhrzeitwerte abrufen:
quelle
SimpleDateFormat
s & 2Date
s verwenden ... können Sie nicht einfach einmal"yyyy/MM/dd HH:mm"
als Format- und Anrufkalender verwenden?Dies gibt Ihnen zum Beispiel 12:32.
Denken Sie daran, android.text.format.Time zu importieren.
quelle
quelle
Verwenden Sie für das aktuelle Datum und die aktuelle Uhrzeit mit Format
In Java
In Kotlin
Datumsformatierungsmuster
quelle
SimpleDateFormat
Klasse. Noch bevor Sie Oreo nicht benötigen, können Sie stattdessen ThreeTenABP verwenden , den Backport von java.time, der modernen Java-API für Datum und Uhrzeit.Sie können auch android.os.SystemClock verwenden. Mit SystemClock.elapsedRealtime () erhalten Sie beispielsweise genauere Zeitangaben, wenn das Telefon schläft.
quelle
Wenn Sie das aktuelle Datum benötigen:
Wenn Sie die aktuelle Zeit benötigen:
quelle
Für ein benutzerdefiniertes Zeit- und Datumsformat:
Die Ausgabe erfolgt wie folgt: Format 2015-06-18T10: 15: 56-05: 00
quelle
quelle
Versuchen Sie, dass dies auch bei mir funktioniert.
quelle
Sie können das Datum erhalten, indem Sie:
Dies gibt Ihnen ein Ergebnis in einer schönen Form, wie in diesem Beispiel: "2014/02/09".
quelle
Time t = new Time();
verwendet die Standardzeitzone. Nach meiner Erfahrung ist default == current.Nun, ich hatte Probleme mit einigen Antworten von der API, also verschmelze ich diesen Code. Ich hoffe, er dient ihnen:
Ausgabe: 15:25 Uhr - 03.10.2017
quelle
Sie können einfach den folgenden Code verwenden:
quelle
Versuche dies
quelle
Die folgende Methode gibt das aktuelle Datum und die aktuelle Uhrzeit in String zurück. Verwenden Sie je nach tatsächlicher Zeitzone eine andere Zeitzone. Ich habe GMT verwendet
quelle
Sie sollten die Kalenderklasse gemäß der neuen API verwenden. Die Datumsklasse ist jetzt veraltet.
quelle
Versuchen Sie, den folgenden Code zu verwenden:
quelle