Je veux obtenir le fuseau horaire du mobile Android lorsque l'on clique sur un bouton.
Réponses
Trop de publicités?Avez-vous essayé d'utiliser TimeZone.getDefault()
:
La plupart des applications utiliseront TimeZone.getDefault() qui renvoie un TimeZone basé sur le fuseau horaire où le programme est exécuté.
Réf : http://developer.Android.com/reference/java/util/TimeZone.html
J'avais besoin de la décalage qui n'incluait pas seulement l'heure d'été, mais qui, en tant que numérique . Voici le code que j'ai utilisé au cas où quelqu'un chercherait un exemple.
Je reçois une réponse de "3.5" (3:30') ce qui est ce à quoi je m'attendrais à Téhéran, en Iran, en hiver et "4.5" (4:30') pour l'été .
J'en avais également besoin sous la forme d'une chaîne de caractères pour pouvoir l'envoyer à un serveur, donc vous n'aurez peut-être 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);
ZoneId de java.time et ThreeTenABP
Réponse moderne :
ZoneId zone = ZoneId.systemDefault();
System.out.println(zone);
Lorsque j'ai exécuté cet extrait dans le fuseau horaire Australie/Sydney, le résultat était exactement le même :
Australia/Sydney
Si vous voulez le nom ou l'abréviation du fuseau horaire conscient de 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
Le site TimeZone
utilisée dans la plupart des autres réponses était celle dont nous disposions lorsque la question a été posée en 2011, même si elle était mal conçue. Aujourd'hui, elle est dépassée depuis longtemps et je recommande d'utiliser plutôt java.time, l'API moderne de date et d'heure de Java qui est sortie en 2014.
Question : java.time ne nécessite-t-il pas le niveau 26 de l'API Android ?
java.time fonctionne très bien sur les appareils Android anciens et récents. Il suffit d'avoir au moins Java 6 .
- Dans Java 8 et les versions ultérieures, ainsi que sur les appareils Android les plus récents (à partir du niveau 26 de l'API), l'API moderne est intégrée.
- Dans les Java 6 et 7 non-Android, obtenez le ThreeTen Backport, le backport des classes modernes (ThreeTen pour JSR 310 ; voir les liens en bas).
- Edit : Sur les (anciens) Android, tant que vous utilisez le plugin Android Gradle 4.0 ou plus récent, avec
coreLibraryDesugaring
vous pouvez utiliser java.time directement. ThreeTenABP n'est plus nécessaire. (Point précédent : utilisez l'édition Android de ThreeTen Backport. Elle s'appelle ThreeTenABP. Et assurez-vous que vous importez les classes de date et d'heure deorg.threeten.bp
avec des sous-paquets).
Liens
- Tutoriel Oracle : Date Heure expliquant comment utiliser java.time.
-
Demande de spécification Java (JSR) 310 où
java.time
a été décrite pour la première fois. -
Le projet ThreeTen Backport le backport de
java.time
à Java 6 et 7 (ThreeTen pour JSR-310). - ThreeTenABP L'édition Android de ThreeTen Backport
- Question : Comment utiliser ThreeTenABP dans un projet Android ? avec une explication très complète.
- Réponses précédentes
- Plus de réponses