zeitzone - Aktuelle Uhrzeit und Datum auf Android abrufen




zeitzone einstellen samsung (20)

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 Datum-Zeit-Klassen haben sich als schlecht entworfen, verwirrend und mühsam erwiesen.

java.time

Diese alten Klassen wurden durch das java.time Framework ersetzt.

Diese neuen Klassen sind inspiriert von dem sehr erfolgreichen Joda-Time Projekt, das von JSR 310 definiert und durch das ThreeTen-Extra Projekt erweitert wurde.

Siehe das Oracle-Lernprogramm .

Instant

Ein Instant ist ein Moment auf der Timeline in UTC mit einer Auflösung von bis zu nanoseconds .

 Instant instant = Instant.now(); // Current moment in UTC.

Zeitzone

Wenden Sie eine Zeitzone ( ZoneId ) an, um eine ZonedDateTime . Wenn Sie die Zeitzone weglassen, wird die aktuelle Standardzeitzone Ihrer JVM implizit angewendet. Besser die explizite Angabe der gewünschten / erwarteten Zeitzone.

Verwenden Sie die richtigen Zeitzonennamen im Format continent/region z. B. America/Montreal , Europe/Brussels oder Asia/Kolkata . Verwenden Sie niemals die 3-4-Buchstaben-Abkürzungen wie EST oder IST da diese 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 );

Generieren von Strings

Sie können einen String einfach als textuelle Darstellung des Datum-Uhrzeit-Wertes generieren. Sie können mit einem Standardformat, einem benutzerdefinierten Format oder einem automatisch lokalisierten Format arbeiten.

ISO 8601

Sie können die toString Methoden aufrufen, um den Text nach dem üblichen und sinnvollen ISO 8601- Standard zu formatieren.

String output = instant.toString();

2016-03-23T03: 09: 01.613Z

Beachten Sie, dass für ZonedDateTime die Methode toString den ISO 8601-Standard erweitert, indem der Name der Zeitzone in eckige Klammern ZonedDateTime wird. Sehr nützliche und wichtige Informationen, aber nicht Standard.

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

Benutzerdefiniertes Format

Oder geben Sie Ihr eigenes bestimmtes Formatierungsmuster mit der DateTimeFormatter Klasse an.

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

Geben Sie ein Locale für eine menschliche Sprache (Englisch, French usw.) an, das bei der Übersetzung des Tages- / Monatsnamens und bei der Definition kultureller Normen wie der Reihenfolge von Jahr, Monat und Datum verwendet werden soll. Beachten Sie, dass das Locale nichts 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 Framework java.time ist in Java 8 und höher integriert. Diese Klassen ersetzen die problematischen alten legacy Date-Time-Klassen wie java.util.Date , .Calendar , & java.text.SimpleDateFormat .

Das Joda-Time Projekt, jetzt im Wartungsmodus , rät zur Migration auf java.time.

Weitere Informationen finden Sie im Oracle-Lernprogramm . Und suchen Sie nach Stack Overflow für viele Beispiele und Erklärungen. Spezifikation ist JSR 310 .

Wo erhalten Sie die java.time Klassen?

  • Java SE 8 und SE 9 und später
    • Eingebaut.
    • Teil der Standard-Java-API mit einer gebündelten Implementierung.
    • Java 9 fügt einige kleinere Funktionen und Korrekturen hinzu.
  • Java SE 6 und SE 7
  • Android
    • Das ThreeTenABP- Projekt passt ThreeTen-Backport (oben erwähnt) speziell für Android an.
    • Siehe Verwendung von ....

Das ThreeTen-Extra Projekt erweitert java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Erweiterungen von java.time. Sie können hier einige nützliche Klassen wie Interval , YearWeek , YearQuarter und more .

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


Die folgende Methode gibt das aktuelle Datum und die Uhrzeit in String zurück. Verwenden Sie eine andere Zeitzone entsprechend Ihrer aktuellen 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);
}

Du könntest benutzen:

import java.util.Calendar

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

Es gibt viele Konstanten im Kalender für alles, was Sie brauchen. Bearbeiten: Kalenderklassendokumentation


Du kannst ( aber nicht länger - siehe unten!) android.text.format.Time :

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

Aus der oben verlinkten Referenz:

Die Klasse Time ersetzt die Klassen java.util.Calendar und java.util.GregorianCalendar schneller. Eine Instanz der Klasse Time repräsentiert einen Zeitpunkt, der mit zweiter Genauigkeit angegeben wird.

Anmerkung 1: Es ist mehrere Jahre her, dass ich diese Antwort geschrieben habe und es handelt sich um eine alte, Android-spezifische und jetzt veraltete Klasse. Google android.text.format.Time nun android.text.format.Time dass "seine Klasse eine Reihe von Problemen hat und es wird empfohlen, stattdessen GregorianCalendar verwenden".

Hinweis 2: Obwohl die Time Klasse über eine toMillis(ignoreDaylightSavings) -Methode verfügt, ist dies nur eine Annehmlichkeit, die an Methoden übergeben wird, die die Zeit in Millisekunden erwarten. Der Zeitwert ist nur auf eine Sekunde genau ; Der Millisekundenanteil ist immer 000 . Wenn du das in einer Schleife machst

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 beginnt 1410543205000 mit der Wiederholung.


Es gibt mehrere Optionen, da Android hauptsächlich Java ist, aber wenn Sie es in einem textView schreiben möchten, würde der folgende Code den Trick machen:

String currentDateTimeString = DateFormat.getDateInstance().format(new Date());

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

Für das aktuelle Datum und die aktuelle Uhrzeit verwenden Sie:

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

Welche Ausgänge:

Feb 27, 2012 5:41:23 PM

Für ein angepasstes Zeit- und Datumsformat:

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

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


Nun, ich hatte Probleme mit einigen Antworten durch die API, also fusioniere ich diesen Code, ich hoffe, dass es ihnen hilft:

    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: 03:25 PM - 2017/10/03


Sie können das Datum abrufen, indem Sie Folgendes verwenden:

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

Dadurch erhalten Sie ein Ergebnis in einer netten Form, wie in diesem Beispiel: "2014/02/09".


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

Außerdem erhalten SimpleDateFormat von here aus weitere Formatierungsoptionen für SimpleDateFormat .


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

Tatsächlich ist es sicherer, die aktuelle Zeitzone auf dem Gerät mit Time.getCurrentTimezone() , sonst erhalten Sie die aktuelle Zeit in UTC.

Time today = new Time(Time.getCurrentTimezone());
today.setToNow();

Dann können Sie alle gewünschten Datumsfelder erhalten, zum Beispiel:

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

Siehe android.text.format.Time Klasse für alle Details.

AKTUALISIEREN

Wie viele Leute darauf hinweisen, sagt Google, dass diese Klasse eine Reihe von Problemen hat und nicht mehr verwendet werden sollte:

Diese Klasse hat eine Reihe von Problemen und es wird empfohlen, stattdessen GregorianCalendar zu verwenden.

Bekannte Probleme:

Aus historischen Gründen findet bei der Durchführung von Zeitberechnungen die gesamte Arithmetik derzeit unter Verwendung von 32-Bit-Ganzzahlen statt. Dies begrenzt den zuverlässigen Zeitbereich, der von 1902 bis 2037 darstellbar ist. Siehe den Wikipedia-Artikel zum Jahr 2038-Problem für Details. Verlassen Sie sich nicht auf dieses Verhalten; Das kann sich in Zukunft ändern. Das Aufrufen von switchTimezone (String) an einem Datum, das nicht vorhanden sein kann, z. B. eine Mauerzeit, die aufgrund eines DST-Ü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 geht von ASCII-Text aus und ist daher nicht für die Verwendung mit Nicht-ASCII-Skripten geeignet.


Versuche dies

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

Versuchen Sie es mit diesem Weg. Alle Formate sind unten aufgeführt, 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);


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 du aktuelle Zeit brauchst,

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

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

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

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

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

Versuchen Sie, das funktioniert auch für mich.


Time time = new Time();
time.setToNow();
System.out.println("time: " + time.hour+":"+time.minute);

So erhalten Sie zum Beispiel 12:32.

Denken Sie daran, android.text.format.Time zu importieren;







time