So erhalten Sie die aktuelle Uhrzeit und das aktuelle Datum in Android


1109

Wie kann ich die aktuelle Uhrzeit und das aktuelle Datum in einer Android-App abrufen?


3
43 Antworten! Während viele von ihnen gut waren, als sie geschrieben wurden, ist die gute Antwort für 2018 hier .
Ole VV

Antworten:


1310

Du könntest benutzen:

import java.util.Calendar

Date currentTime = Calendar.getInstance().getTime();

Im Kalender gibt es viele Konstanten für alles, was Sie brauchen.

Bearbeiten:
Überprüfen Sie die Dokumentation der Kalenderklasse


14
+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.
Akousmata

487

Sie können (sollten aber nicht mehr - siehe unten!) Android.text.format.Time verwenden :

Time now = new Time();
now.setToNow();

Aus der oben verlinkten Referenz:

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 = new Time();   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.


2
@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.
ToolmakerSteve

Verwenden Sie nicht die Zeitklasse . Es wird in Zukunft entfernt und hat viele Probleme damit.
Sandy Chapman

1
> 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:

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault());
String currentDateandTime = sdf.format(new Date());

Oder,

Datum :

String currentDate = new SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()).format(new Date());

Zeit:

String currentTime = new SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(new Date());

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 = new SimpleDateFormat("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

126

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 = new Time(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

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:

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.


Zeit sollte aus welchem ​​Paket importiert werden?
ManishSB

Diese Klasse wurde in API-Level 22 veraltet. Wir können stattdessen GregorianCalendar verwenden.
Choletski

78

Verwenden Sie für das aktuelle Datum und die aktuelle Uhrzeit:

String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());

Welche Ausgänge:

Feb 27, 2012 5:41:23 PM

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?
Bhavesh Hirpara

2
Dies ist laut Android-API die empfohlene Vorgehensweise: developer.android.com/reference/java/text/… Danke!
M Granja

58

Versuchen Sie es auf diese Weise. Alle Formate sind unten angegeben, um das Datums- und Uhrzeitformat 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);

zuerst

zweite dritte


53

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

Verwenden Sie die richtige Zeitzone Namen im Format continent/regionwie America/Montreal, Europe/Brusselsoder Asia/Kolkata. Verwenden Sie niemals die Abkürzungen mit 3-4 Buchstaben, wie ESToder ISTda sie weder standardisiert noch eindeutig sind.

ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Or "Asia/Kolkata", "Europe/Paris", and so on.
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

Tabelle der Datums- und Uhrzeittypen in Java, sowohl modern als auch alt

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.

2016-03-22T20: 09: 01.613-08: 00 [America / Los_Angeles]

Benutzerdefiniertes Format

Oder geben Sie Ihr eigenes Formatierungsmuster für die DateTimeFormatterKlasse an.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy hh:mm a" );

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.

Ü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ürjava.sql.* Klassen.

Woher bekomme ich die java.time-Klassen?

In der Tabelle ist aufgeführt, welche Implementierung der * java.time * -Technologie auf welchen Versionen von Java und Android verwendet werden soll.


2
@ 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 = new Date(System.currentTimeMillis());

Und wie von anderen erwähnt, um eine Zeit zu schaffen

Time currentTime = new Time();
currentTime.setToNow();

13
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 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = sdf.format(c.getTime());

Ausgabe:

2014-11-11 00:47:55

Sie erhalten auch einige weitere Formatierungsoptionen für SimpleDateFormatvon hier .


Zu Ihrer Information, die störenden alten 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

32

Ganz einfach: Sie können die Zeit wie folgt analysieren, um separate Werte für die aktuelle Zeit zu erhalten:

Calendar cal = Calendar.getInstance(); 

  int millisecond = cal.get(Calendar.MILLISECOND);
  int second = cal.get(Calendar.SECOND);
  int minute = cal.get(Calendar.MINUTE);
        //12 hour format
  int hour = cal.get(Calendar.HOUR);
        //24 hour format
  int hourofday = cal.get(Calendar.HOUR_OF_DAY);

Gleiches gilt für das Datum wie folgt:

Calendar cal = Calendar.getInstance(); 

  int dayofyear = cal.get(Calendar.DAY_OF_YEAR);
  int year = cal.get(Calendar.YEAR);
  int dayofweek = cal.get(Calendar.DAY_OF_WEEK);
  int dayofmonth = cal.get(Calendar.DAY_OF_MONTH);

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(new Date());

// textView is the TextView view that should display it
textView.setText(currentDateTimeString);

8
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

24
SimpleDateFormat databaseDateTimeFormate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
SimpleDateFormat databaseDateFormate = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf1 = new SimpleDateFormat("dd.MM.yy");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy.MM.dd G 'at' hh:mm:ss z");
SimpleDateFormat sdf3 = new SimpleDateFormat("EEE, MMM d, ''yy");
SimpleDateFormat sdf4 = new SimpleDateFormat("h:mm a");
SimpleDateFormat sdf5 = new SimpleDateFormat("h:mm");
SimpleDateFormat sdf6 = new SimpleDateFormat("H:mm:ss:SSS");
SimpleDateFormat sdf7 = new SimpleDateFormat("K:mm a,z");
SimpleDateFormat sdf8 = new SimpleDateFormat("yyyy.MMMMM.dd GGG hh:mm aaa");


String currentDateandTime = databaseDateTimeFormate.format(new Date());     //2009-06-30 08:29:36
String currentDateandTime = databaseDateFormate.format(new Date());     //2009-06-30
String currentDateandTime = sdf1.format(new Date());     //30.06.09
String currentDateandTime = sdf2.format(new Date());     //2009.06.30 AD at 08:29:36 PDT
String currentDateandTime = sdf3.format(new Date());     //Tue, Jun 30, '09
String currentDateandTime = sdf4.format(new Date());     //8:29 PM
String currentDateandTime = sdf5.format(new Date());     //8:29
String currentDateandTime = sdf6.format(new Date());     //8:28:36:249
String currentDateandTime = sdf7.format(new Date());     //8:29 AM,PDT
String currentDateandTime = sdf8.format(new Date());     //2009.June.30 AD 08:29 AM

Datumsformat Muster

G   Era designator (before christ, after christ)
y   Year (e.g. 12 or 2012). Use either yy or yyyy.
M   Month in year. Number of 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   Hour of day, 1-12 (AM / PM) (normally hh)
H   Hour of day, 0-23 (normally HH)
m   Minute in hour, 0-59 (normally mm)
s   Second in minute, 0-59 (normally ss)
S   Millisecond in second, 0-999 (normally SSS)
E   Day in week (e.g Monday, Tuesday etc.)
D   Day in year (1-366)
F   Day of week in month (e.g. 1st Thursday of December)
w   Week in year (1-53)
W   Week in month (0-5)
a   AM / PM marker
k   Hour in day (1-24, unlike HH's 0-23)
K   Hour in day, AM / PM (0-11)
z   Time Zone

1
Obwohl auch andere Antworten richtig sind. Diese Antwort hat mir gefallen, da sie auch zeitbezogenen Problemen hilft. Vielen Dank @Vighnesh KM
Ankit Gupta

17
final Calendar c = Calendar.getInstance();
    int mYear = c.get(Calendar.YEAR);
    int mMonth = c.get(Calendar.MONTH);
    int mDay = c.get(Calendar.DAY_OF_MONTH);

textView.setText(""+mDay+"-"+mMonth+"-"+mYear);

15

Dies ist eine Methode, mit der Sie Datum und Uhrzeit ermitteln können:

private String getDate(){
    DateFormat dfDate = new SimpleDateFormat("yyyy/MM/dd");
    String date=dfDate.format(Calendar.getInstance().getTime());
    DateFormat dfTime = new SimpleDateFormat("HH:mm");
    String time = dfTime.format(Calendar.getInstance().getTime());
    return date + " " + time;
}

Sie können diese Methode aufrufen und die aktuellen Datums- und Uhrzeitwerte abrufen:

2017/01//09 19:23

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 = new Time();
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.


12
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    Calendar cal = Calendar.getInstance();
    System.out.println("time => " + dateFormat.format(cal.getTime()));

    String time_str = dateFormat.format(cal.getTime());

    String[] s = time_str.split(" ");

    for (int i = 0; i < s.length; i++) {
         System.out.println("date  => " + s[i]);
    }

    int year_sys = Integer.parseInt(s[0].split("/")[0]);
    int month_sys = Integer.parseInt(s[0].split("/")[1]);
    int day_sys = Integer.parseInt(s[0].split("/")[2]);

    int hour_sys = Integer.parseInt(s[1].split(":")[0]);
    int min_sys = Integer.parseInt(s[1].split(":")[1]);

    System.out.println("year_sys  => " + year_sys);
    System.out.println("month_sys  => " + month_sys);
    System.out.println("day_sys  => " + day_sys);

    System.out.println("hour_sys  => " + hour_sys);
    System.out.println("min_sys  => " + min_sys);

12

Verwenden Sie für das aktuelle Datum und die aktuelle Uhrzeit mit Format

In Java

Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = sdf.format(c.getTime());
Log.d("Date","DATE : " + strDate)

In Kotlin

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.


10

Wenn Sie das aktuelle Datum benötigen:

Calendar cc = Calendar.getInstance();
int year = cc.get(Calendar.YEAR);
int month = cc.get(Calendar.MONTH);
int mDay = cc.get(Calendar.DAY_OF_MONTH);
System.out.println("Date", year + ":" + month + ":" + mDay);

Wenn Sie die aktuelle Zeit benötigen:

 int mHour = cc.get(Calendar.HOUR_OF_DAY);
 int mMinute = cc.get(Calendar.MINUTE);
 System.out.println("time_format" + String.format("%02d:%02d", mHour , mMinute));

9

Für ein benutzerdefiniertes Zeit- und Datumsformat:

    SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ",Locale.ENGLISH);
    String cDateTime=dateFormat.format(new Date());

Die Ausgabe erfolgt wie folgt: Format 2015-06-18T10: 15: 56-05: 00


8
Date todayDate = new Date();
todayDate.getDay();
todayDate.getHours();
todayDate.getMinutes();
todayDate.getMonth();
todayDate.getTime();

8
Time now = new Time();
now.setToNow();

Versuchen Sie, dass dies auch bei mir funktioniert.


8

Sie können das Datum erhalten, indem Sie:

Time t = new Time(Time.getCurrentTimezone());
t.setToNow();
String date = t.format("%Y/%m/%d");

Dies gibt Ihnen ein Ergebnis in einer schönen Form, wie in diesem Beispiel: "2014/02/09".


Der parameterlose Konstruktor Time t = new Time();verwendet die Standardzeitzone. Nach meiner Erfahrung ist default == current.
William T. Mallard

7

Nun, ich hatte Probleme mit einigen Antworten von der API, also verschmelze ich diesen Code. Ich hoffe, er dient ihnen:

    Time t = new Time(Time.getCurrentTimezone());
    t.setToNow();
    String date1 = t.format("%Y/%m/%d");

    Date date = new Date(System.currentTimeMillis());
    SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm aa",
            Locale.ENGLISH);
    String var = dateFormat.format(date);
    String horafecha = var+ " - " + date1;

    tvTime.setText(horafecha);

Ausgabe: 15:25 Uhr - 03.10.2017


7

Sie können einfach den folgenden Code verwenden:

 DateFormat df = new SimpleDateFormat("HH:mm"); // Format time
 String time = df.format(Calendar.getInstance().getTime());

 DateFormat df1 = new SimpleDateFormat("yyyy/MM/dd"); // Format date
 String date = df1.format(Calendar.getInstance().getTime());

6

Versuche dies

String mytime = (DateFormat.format("dd-MM-yyyy hh:mm:ss", new java.util.Date()).toString());

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

public static String GetToday(){
    Date presentTime_Date = Calendar.getInstance().getTime();
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
    return dateFormat.format(presentTime_Date);
}

4

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

4

Versuchen Sie, den folgenden Code zu verwenden:

 Date date = new Date();
 SimpleDateFormat dateFormatWithZone = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",Locale.getDefault());  
 String currentDate = dateFormatWithZone.format(date);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.