Je souhaite obtenir le fuseau horaire du mobile Android en cliquant sur un bouton.
Je souhaite obtenir le fuseau horaire du mobile Android en cliquant sur un bouton.
Réponses:
Avez-vous essayé d'utiliser TimeZone.getDefault()
:
La plupart des applications utiliseront TimeZone.getDefault () qui renvoie une TimeZone basée sur le fuseau horaire où le programme est en cours d'exécution.
Réf: http://developer.android.com/reference/java/util/TimeZone.html
DateTimeZone.forTimeZone(TimeZone.getDefault());
TimeZone tz = TimeZone.getDefault();
System.out.println("TimeZone "+tz.getDisplayName(false, TimeZone.SHORT)+" Timezon id :: " +tz.getID());
Production:
TimeZone GMT + 09: 30 Identifiant du fuseau horaire :: Australia / Darwin
Edit: corrigé le cas
J'avais besoin du décalage qui incluait non seulement l'heure de la lumière du jour, mais aussi un numéro . Voici le code que j'ai utilisé au cas où quelqu'un chercherait un exemple.
J'obtiens une réponse de "3,5" (3h30 '), ce à quoi je m'attendrais à Téhéran, en Iran en hiver et de "4,5" (4h30') pour l'été.
J'en avais également besoin sous forme de chaîne pour pouvoir le publier sur un serveur afin que vous n'ayez pas besoin de la dernière ligne.
pour obtenir le fuseau horaire actuel:
TimeZone tz = TimeZone.getDefault();
Date now = new Date();
//Import part : x.0 for double number
double offsetFromUtc = tz.getOffset(now.getTime()) / 3600000.0;
String m2tTimeZoneIs = Double.parseDouble(offsetFromUtc);
Essayez ce code-
Calendar cal = Calendar.getInstance();
TimeZone tz = cal.getTimeZone();
Il renverra le fuseau horaire sélectionné par l'utilisateur.
Calendar
objet pour cela est un non-sens. La création de ce type d'objet est coûteuse. TimeZone.getDefault()
est le moyen approprié pour y parvenir.
TimeZone timeZone = TimeZone.getDefault();
timeZone.getID();
Il imprimera comme
Asia/Kolkata
Solution la plus simple avec un format de date simple: SimpleDateFormat ("ZZZZZ"):
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"),
Locale.getDefault());
Date currentLocalTime = calendar.getTime();
DateFormat date = new SimpleDateFormat("ZZZZZ",Locale.getDefault());
String localTime = date.format(currentLocalTime);
System.out.println(localTime+ " TimeZone " );
==> La sortie est: +05: 30
Selon http://developer.android.com/reference/android/text/format/Time.html, vous devriez utiliser Time.getCurrentTimezone () pour récupérer le fuseau horaire actuel de l'appareil.
Réponse moderne:
ZoneId zone = ZoneId.systemDefault();
System.out.println(zone);
Lorsque j'ai exécuté cet extrait de code dans le fuseau horaire Australie / Sydney, la sortie était exactement la suivante:
Australia/Sydney
Si vous voulez le nom ou l'abréviation du fuseau horaire compatible avec l'heure d'été (DST):
DateTimeFormatter longTimeZoneFormatter = DateTimeFormatter.ofPattern("zzzz", Locale.getDefault());
String longTz = ZonedDateTime.now(zone).format(longTimeZoneFormatter);
System.out.println(longTz);
DateTimeFormatter shortTimeZoneFormatter = DateTimeFormatter.ofPattern("zzz", Locale.getDefault());
String shortTz = ZonedDateTime.now(zone).format(shortTimeZoneFormatter);
System.out.println(shortTz);
Eastern Summer Time (New South Wales) EST
La TimeZone
classe utilisée dans la plupart des autres réponses était celle que nous avions lorsque la question a été posée en 2011, même si elle était mal conçue. Aujourd'hui, il est obsolète depuis longtemps, et je recommande d'utiliser à la place java.time, l'API Java de date et d'heure moderne qui est sortie en 2014.
java.time fonctionne bien sur les appareils Android plus anciens et plus récents. Il nécessite juste au moins Java 6 .
org.threeten.bp
sous-packages.java.time
été décrit pour la première fois.java.time
vers Java 6 et 7 (ThreeTen pour JSR-310).Pour les appareils avec l'API 26 et plus, vous pouvez l'obtenir comme ceci:
ZonedDateTime.now().getZone().toString();
Toutes les réponses ici semblent suggérer de définir le paramètre daylite sur false . Ceci est incorrect pour de nombreux fuseaux horaires qui changent de noms abrégés en fonction de la période de l'année (par exemple EST vs EDT).
La solution ci-dessous vous donnera l'abréviation correcte en fonction de la date actuelle du fuseau horaire.
val tz = TimeZone.getDefault()
val isDaylite = tz.inDaylightTime(Date())
val timezone = tz.getDisplayName(isDaylite, TimeZone.SHORT)
TimeZone
classe est mal conçue et obsolète depuis longtemps.