2017-03-16 11 views
0

Ces derniers jours ont été un cauchemar où j'ai même envisagé de désinstaller puis de réinstaller Android Studio juste pour voir si mon build était le problème.Périphériques Android Timezone Renvoie incorrectement GMT (00:00) toujours avec rawOffset de 0

Une application que je fais nécessite un horodatage dans une image et l'horodatage doit également afficher le fuseau horaire. J'ai essayé la méthode habituelle

Calendar now = Calendar.getInstance(); 
TimeZone timeZone = now.getTimeZone(); 

et pour tous les appareils de test Android que j'ai, tous revenions GMT 00:00. J'ai passé 2 jours à essayer de trouver pourquoi tous les exemples de stackOveflow ne fonctionnent pas et j'ai pensé que cela devait être mon build car même changer de fuseau horaire sur l'appareil restait le temps GMT retourné. Avant de désinstaller, je suis tombé sur la solution.

Répondre

0

Solution. La réponse que j'ai trouvée visait une autre question mais cela a fonctionné pour moi. Définissez d'abord le fuseau horaire sur Null et ensuite, le fuseau horaire correct du périphérique est sélectionné. Si sur l'émulateur cependant, le fuseau horaire restera UTC.

 TimeZone.setDefault(null); 
     System.setProperty("user.timezone", ""); 
     TimeZone.setDefault(null); 

     //get Calendar instance 
     Calendar now = Calendar.getInstance(); 

     //get current TimeZone using getTimeZone method of Calendar class 
     TimeZone timeZone = now.getTimeZone(); 

     //display current TimeZone using getDisplayName() method of TimeZone class 
     String strTimeZone=timeZone.getDisplayName(false,TimeZone.SHORT); 
     long lngTimeZoneOffset= timeZone.getRawOffset(); 

J'espère que cela sauve quelqu'un des jours de tirer les cheveux.