189 votes

Comment obtenir le TimeZone d'un mobile Android ?

Je veux obtenir le fuseau horaire du mobile Android lorsque l'on clique sur un bouton.

245voto

MasterCassim Points 4525

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

160voto

Zulfiqar Ali Points 368
TimeZone tz = TimeZone.getDefault();
System.out.println("TimeZone   "+tz.getDisplayName(false, TimeZone.SHORT)+" Timezone id :: " +tz.getID());

Sortie :

TimeZone GMT+09:30 Timezone id : : Australia/Darwin

21voto

Jigar Joshi Points 116533

Edit : corrigé le cas

TimeZone.getDefault()

17voto

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

15voto

Ole V.V. Points 24677

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 de org.threeten.bp avec des sous-paquets).

Liens

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X