Antworten:
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
Calendar.getInstance().getTime()
oder Calendar.getInstance().getTimeInMillis()
wird funktionieren.
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 Time
Klasse ü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. 1410543204000
bis die nächste Sekunde begonnen hat. Zu diesem Zeitpunkt 1410543205000
beginnt die Wiederholung.
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 ersetzt ZonedDateTime
. 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:
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());
String currentDateandTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
sdf.setTimeZone(TimeZone.getDefault())
in der Mitte einfügen
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
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.
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
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);
Instant.now() // Current moment in UTC.
…oder…
ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) // In a particular time zone
Die anderen Antworten sind zwar korrekt, aber veraltet. Die alten Datums- und Uhrzeitklassen haben sich als schlecht gestaltet, verwirrend und problematisch erwiesen.
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 .
Instant instant = Instant.now(); // Current moment in UTC.
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/region
wie America/Montreal
, Europe/Brussels
oder Asia/Kolkata
. Verwenden Sie niemals die Abkürzungen mit 3-4 Buchstaben, wie EST
oder IST
da 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 );
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.
Sie können die toString
Methoden 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 ZonedDateTime
die toString
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.
2016-03-22T20: 09: 01.613-08: 00 [America / Los_Angeles]
Oder geben Sie Ihr eigenes Formatierungsmuster für die DateTimeFormatter
Klasse an.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy hh:mm a" );
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 dies Locale
nichts mit der Zeitzone zu tun hat.
formatter = formatter.withLocale( Locale.US ); // Or Locale.CANADA_FRENCH or such.
String output = zdt.format( formatter );
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.
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?
Instant.now()
und ZonedDateTime.now()
ist erforderlich API 26
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();
Cannot resolve constructor Date()
in Android, das Android SDK verwendet eine Mischung aus Java 6 und 7.
Date currentDate = new Date(System.currentTimeMillis());
ist richtig
new Date(System.currentTimeMillis())
nicht richtig: (a) es ist redundant, da das genau das gleiche ist wie new Date()
. (b) Die problematische java.util.Date
Klasse wird ab java.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:
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 SimpleDateFormat
von hier .
java.util.Date
, java.util.Calendar
und java.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:
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);
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);
Calendar
oder verwenden GregorianCalendar
. Die Date
Klasse ist veraltet.
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
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);
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
SimpleDateFormat
s & 2 Date
s verwenden ... können Sie nicht einfach einmal "yyyy/MM/dd HH:mm"
als Format- und Anrufkalender verwenden?
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);
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
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.
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));
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
Date todayDate = new Date();
todayDate.getDay();
todayDate.getHours();
todayDate.getMinutes();
todayDate.getMonth();
todayDate.getTime();
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".
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:
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
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());
Versuche dies
String mytime = (DateFormat.format("dd-MM-yyyy hh:mm:ss", new java.util.Date()).toString());
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);
}
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);
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);