Je ne serais pas si dur avec asha v. Je cherchais juste la même chose et les réponses que j'ai trouvées étaient différentes de celles-ci. En fait, la recherche par le "TimeZone.getDefault" exact m'a conduit ici.
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.
Si vous utilisez JodaTime , vous pouvez obtenir une DateTimeZone avec les éléments suivants:DateTimeZone.forTimeZone(TimeZone.getDefault());
Joshua Pinter
@JoshPinter quel package dois-je utiliser, celui sur android.icu.utils ou le java.util?
Neon Warge
1
J'ai changé le fuseau horaire de l'appareil en CST, cela ne me rend pas CST. Existe-t-il un moyen d'obtenir le fuseau horaire de l'appareil?
Abhinav Saxena
Je me demande si TimeZone.getDefault est affecté si nous simulons en quelque sorte le fuseau horaire de l'appareil. Cela ne semble pas être sur le simulateur Android.
Hau Luu
@NeonWarge Both fonctionnera, bien que android.icu ne fonctionne que pour l'API 24 et plus.
Nicolas
136
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
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 =newDate();//Import part : x.0 for double numberdouble offsetFromUtc = tz.getOffset(now.getTime())/3600000.0;String m2tTimeZoneIs =Double.parseDouble(offsetFromUtc);
Créer un Calendarobjet 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.
anonyme le
3
@KrLx_roller Veuillez vérifier attentivement avant de voter pour la réponse. J'ai écrit ma réponse renvoie le fuseau horaire sélectionné par l'utilisateur alors que TimeZone.getDefault () renverra le fuseau horaire par défaut de l'installation. Pour plus d'informations, veuillez code.google.com/p/android/issues/detail?id=2037 .
anujprashar
Votre code renvoie le même fuseau horaire que TimeZone.getDefault () sur Android 4.2. TimeZone.getDefault () renverra le fuseau horaire sélectionné dans les paramètres -> date et heure.
La TimeZoneclasse 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.
Question: java.time ne nécessite-t-il pas le niveau d'API Android 26?
java.time fonctionne bien sur les appareils Android plus anciens et plus récents. Il nécessite juste au moins Java 6 .
Dans Java 8 et versions ultérieures et sur les appareils Android plus récents (à partir du niveau d'API 26), l'API moderne est intégrée.
Dans Java 6 et 7 non-Android, obtenez le ThreeTen Backport, le backport des classes modernes (ThreeTen pour JSR 310; voir les liens en bas).
Sur Android (plus ancien), utilisez l'édition Android de ThreeTen Backport. Il s'appelle ThreeTenABP. Et assurez-vous d'importer les classes de date et d'heure à partir des org.threeten.bpsous-packages.
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)
Réponses:
Avez-vous essayé d'utiliser
TimeZone.getDefault()
:Réf: http://developer.android.com/reference/java/util/TimeZone.html
la source
DateTimeZone.forTimeZone(TimeZone.getDefault());
Production:
la source
Edit: corrigé le cas
TimeZone.getDefault()
la source
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:
la source
Essayez ce code-
Il renverra le fuseau horaire sélectionné par l'utilisateur.
la source
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.Il imprimera comme
la source
Solution la plus simple avec un format de date simple: SimpleDateFormat ("ZZZZZ"):
==> La sortie est: +05: 30
la source
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.
la source
ZoneId de java.time et ThreeTenABP
Réponse moderne:
Lorsque j'ai exécuté cet extrait de code dans le fuseau horaire Australie / Sydney, la sortie était exactement la suivante:
Si vous voulez le nom ou l'abréviation du fuseau horaire compatible avec l'heure d'été (DST):
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.Question: java.time ne nécessite-t-il pas le niveau d'API Android 26?
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.Liens
java.time
été décrit pour la première fois.java.time
vers Java 6 et 7 (ThreeTen pour JSR-310).la source
Pour les appareils avec l'API 26 et plus, vous pouvez l'obtenir comme ceci:
la source
Sur mon appareil, le
TimeZone.getDefault()
fuseau horaire UTC est toujours renvoyé.Je dois faire ceci pour obtenir le fuseau horaire configuré par l'utilisateur:
Il renverra le fuseau horaire sélectionné par l'utilisateur.
la source
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.
la source
TimeZone
classe est mal conçue et obsolète depuis longtemps.