Je veux obtenir l'heure UTC actuelle en millis. J'ai cherché sur Google et j'ai obtenu des réponses indiquant que System.currentTimeMillis () renvoie l'heure UTC. mais ce n'est pas le cas. Si je fais ce qui suit:
long t1 = System.currentTimeMillis();
long t2 = new Date().getTime();
long t3 = Calendar.getInstance().getTimeInMillis();
les trois temps sont presque identiques (la différence est en millisecondes en raison des appels).
t1 = 1372060916
t2 = 1372060917
t3 = 1372060918
et cette heure n'est pas l'heure UTC mais c'est mon fuseau horaire. Comment puis-je obtenir l'heure UTC actuelle dans Android?
Réponses:
Les trois lignes que vous avez affichées donneront le nombre de millisecondes depuis l'époque Unix, qui est un point fixe dans le temps, non affecté par votre fuseau horaire local.
Vous dites "cette heure n'est pas l'heure UTC" - je suppose que vous l'avez diagnostiqué incorrectement. Je suggérerais d'utiliser epochconverter.com pour cela. Par exemple, dans votre exemple:
Nous ne savons pas quand vous avez généré cette valeur, mais à moins que ce ne soit réellement à 8 h 01 UTC, c'est un problème avec votre horloge système.
Ni
System.currentTimeMillis
la valeur dans unDate
lui-même ne sont affectées par le fuseau horaire. Cependant, vous devez être conscient que n'utilisez le fuseau horaire local, qui fourvoie de nombreux développeurs en pensant qu'un est intrinsèquement associé à un fuseau horaire - ce n'est pas, il est juste un instant dans le temps, sans fuseau horaire associé ou même système de calendrier.Date.toString()
Date
la source
Date.getTime()
pour trouver le temps en millisecondes depuis l'époque Unix, divisez par 1000 (car ce nom de fichier est en secondes depuis l'époque Unix) et formatez simplement cet entier sous forme de chaîne.Je peux confirmer que les trois appels pourraient dépendre de l'heure locale, compte tenu de l'époque, et non de la
Date.toString()
méthode ou d'une méthode similaire. Je les ai vus dépendre de l'heure locale sur des appareils spécifiques exécutant Android 2.3. Je ne les ai pas testés avec d'autres appareils et versions Android. Dans ce cas, l'heure locale a été réglée manuellement.Le seul moyen fiable d'obtenir une heure UTC indépendante est de demander une mise à jour de l'emplacement à l'aide du
GPS_PROVIDER
. LagetTime()
valeur d'un emplacement récupéréNETWORK_PROVIDER
dépend également de l'heure locale. Une autre option consiste à envoyer un ping à un serveur qui renvoie un horodatage UTC, par exemple.Donc, ce que je fais est le suivant:
la source