it-swarm.com.de

Aktuelle Uhrzeit in einer bestimmten Zeitzone abrufen: Android

Ich bin neu bei Android und ich stehe gerade vor einem Problem, die aktuelle Zeit aufgrund der Zeitzone zu erhalten.

Ich bekomme eine Zeitzone im Format "GMT-7", also eine Zeichenfolge . Und ich habe die Systemzeit.

Gibt es eine saubere Möglichkeit, die aktuelle Uhrzeit in der oben angegebenen Zeitzone abzurufen? Jede Hilfe wird geschätzt . Danke,

edit: Versuch, dies zu tun:

public String getTime(String timezone) {
    Calendar c = Calendar.getInstance();
    c.setTimeZone(TimeZone.getTimeZone(timezone));
    Date date = c.getTime();
    SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
    String strDate = df.format(date);
    return c.getTime().toString();
}
15
Vishesh Joshi

Ich habe es so zu arbeiten:

TimeZone tz = TimeZone.getTimeZone("GMT+05:30");
Calendar c = Calendar.getInstance(tz);
String time = String.format("%02d" , c.get(Calendar.HOUR_OF_DAY))+":"+
            String.format("%02d" , c.get(Calendar.MINUTE))+":"+
.                   String.format("%02d" , c.get(Calendar.SECOND))+":"+
    .           String.format("%03d" , c.get(Calendar.MILLISECOND));
19
Vishesh Joshi

Java.time

Sowohl die älteren mit Java gebündelten Date-Time-Klassen als auch die Joda-Time-Bibliothek eines Drittanbieters wurden durch das in Java 8 und höher integrierte Java.time - Framework ersetzt. Diese Klassen ersetzen die alten störenden Datum-Zeit-Klassen wie Java.util.Date. Siehe Oracle Tutorial . Ein Großteil der Java.time-Funktionalität wird in ThreeTen-Backport auf Java 6 & 7 zurückportiert und weiter auf Android in ThreeTenABP angepasst.

Übrigens, beziehen Sie sich niemals auf eine offset-from-UTC mit einer einstelligen Zahl von Stunden wie -7, da dies nicht standardmässig ist und mit verschiedenen Protokollen und Bibliotheken nicht kompatibel ist. Füllen Sie die zweite Ziffer immer mit einer Null auf, z. B. -07

Wenn Sie nur einen Versatz anstelle einer Zeitzone haben, verwenden Sie die OffsetDateTime-Klasse.

ZoneOffset offset = ZoneOffset.ofHours( -7 );
OffsetDateTime odt = OffsetDateTime.now( offset );
String output1 = odt.toLocalTime().toString();
System.out.println( "Current time in " + offset + ": " + output1 );

Aktuelle Zeit in -07: 00: 19: 41: 36.525

Wenn Sie über eine vollständige Zeitzone verfügen, die ein Versatz plus ein Satz von Regeln für die Behandlung von Anomalien wie der Sommerzeit (DST) und nicht nur ein Versatz von UTC ist, verwenden Sie die ZonedDateTime-Klasse.

ZoneId denverTimeZone = ZoneId.of( "America/Denver" );
ZonedDateTime zdt = ZonedDateTime.now( denverTimeZone );
String output2 = zdt.toLocalTime().toString();
System.out.println( "Current time in " + denverTimeZone + ": " + output2 );

Aktuelle Zeit in Amerika/Denver: 20: 41: 36.560

Siehe diesen Code in Aktion in Ideone.com

Joda-Zeit

Sie können Joda-Time 2.7 in Android verwenden. Vereinfacht die Arbeit mit Datum und Uhrzeit.

DateTimeZone zone = DateTimeZone.forID ( "America/Denver" );
DateTime dateTime = new DateTime ( zone );
String output = dateTime.toLocalTime ().toString ();

dump zur Konsole.

System.out.println ( "zone: " + zone + " | dateTime: " + dateTime + " | output: " + output );

Wann laufen…

zone: Amerika/Denver | dateTime: 2016-07-11T20: 50: 17.668-06: 00 | Ausgabe: 20: 50: 17,668

Graf seit der Epoche

Ich empfehle nachdrücklich gegen Nachverfolgung durch Countdown seit - Epoche . Bei Bedarf können Sie jedoch die internen Millisekunden von Joda-Time seit Epoche ( Unix-Zeit , erster Zeitpunkt von 1970 UTC) extrahieren, indem Sie die getMillis -Methode für eine DateTime aufrufen.

Beachten Sie die Verwendung der 64-Bit long anstelle der 32-Bit intprimitiven Typen .

In Java.time. Beachten Sie, dass Sie hier möglicherweise Daten verlieren, da Java.time eine Auflösung von bis zu Nanosekunden enthält. Von Nanosekunden zu Millisekunden zu gehen bedeutet, bis zu sechs Stellen eines Dezimalbruchs einer Sekunde zu verkürzen (3 Stellen für Millisekunden, 9 für Nanosekunden).

long millis = Instant.now ().toEpochMilli ();

In der Joda-Zeit.

long millis = DateTime.now( denverTimeZone ).getMillis();
11
Basil Bourque
Calendar cal = Calendar.getInstance();
TimeZone tz = cal.getTimeZone();
Log.d("Time zone","="+tz.getDisplayName());
10
Asier Aranbarri

Versuche dies:

SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
df.setTimeZone(TimeZone.getTimeZone("YOUR_TIMEZONE"));
String strDate = df.format(date);

Bei YOUR_TIMEZONE kann es sich um Folgendes handeln: GMT, UTC, GMT-5 usw.

6
Flávio Faria

Legen Sie für die Zeitzone den Formatierer und nicht den Kalender fest:

public String getTime(String timezone) {
    Calendar c = Calendar.getInstance();
    Date date = c.getTime(); //current date and time in UTC
    SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
    df.setTimeZone(TimeZone.getTimeZone(timezone)); //format in given timezone
    String strDate = df.format(date);
    return strDate;
}
5
igork

Ja, du kannst. Durch Aufruf der TimeZone setDefault()-Methode.

public String getTime(String timezone) {
    TimeZone defaultTz = TimeZone.getDefault();

    TimeZone.setDefault(TimeZone.getTimeZone(timezone));
    Calendar cal = Calendar.getInstance();
    Date date = cal.getTime();
    String strDate = date.toString();

    // Reset Back to System Default
    TimeZone.setDefault(defaultTz);

    return strDate;
}
3
Tang Chanrith

Ich habe einen besseren und einfacheren Weg gefunden.

Erste Zeitzone der App mit einstellen

    TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles"));

Rufen Sie dann Calander an, um das Datum intern abzurufen. Die Standardzeitzone wird von oben durch die App festgelegt.

     Calendar cal = Calendar.getInstance();
     Log.d("Los angeles time   ",cal.getTime().toString());

Es wird die aktuelle Zeit basierend auf der Zeitzone angegeben.

D/Los Angeles Zeit: Do Jun 21 13:52:25 PDT 2018

1
Justcurious
 TimeZone tz = TimeZone.getTimeZone(TimeZoneID);
 Calendar c= Calendar.getInstance(tz);
 String time=new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new Date(cal.getTimeInMillis()));

TimeZoneID kann nach Ihrer Wahl eine von unten sein

String[] ids=TimeZone.getAvailableIDs();

dann kann die Zeit wie oben als akzeptierte Antwort erhalten werden

String time = String.format("%02d" , c.get(Calendar.HOUR_OF_DAY))+":"+
            String.format("%02d" , c.get(Calendar.MINUTE))+":"+
                  String.format("%02d" , c.get(Calendar.SECOND))+":"+
               String.format("%03d" , c.get(Calendar.MILLISECOND));
1
Rajesh Nasit

Am saubersten ist es mit SimpleDateFormat

SimpleDateFormat = SimpleDateFormat("MMM\nd\nh:mm a", Locale.getDefault())

oder Sie können das Gebietsschema angeben

0
Kyle