Comment faire pour convertir l'UTC et fuseau horaire local en Java
Je suis curieux de connaître le fuseau horaire en Java. Je veux obtenir de l'heure UTC en millisecondes à partir d'un périphérique et de les envoyer au serveur. Serveur de convertir fuseau horaire local lors de l'affichage de temps pour les utilisateurs. Fuseau horaire dans mon système est de l'Australie/Sydney( UTC + 11:00), et j'ai obtenu le résultat ci-dessous quand je l'ai testé fuseau horaire:
int year = 2014;
int month = 0;
int date = 14;
int hourOfDay = 11;
int minute = 12;
int second = 0;
Calendar c1 = Calendar.getInstance();
c1.set(year, month, date, hourOfDay, minute, second);
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss z");
System.out.println(sdf.format(c1.getTime()));
Calendar c2 = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
c2.set(year, month, date, hourOfDay, minute, second);
System.out.println(sdf.format(c2.getTime()));
de sortie:
14/01/2014 11:12:00 EST
14/01/2014 22:12:00 EST
J'ai pensé que je pourrais avoir 13/01/2014 00:12:00 pour c2 parce que l'heure UTC est de 11 heures plus tard que le mien. N'a pas de Calendrier de travail de la façon dont je m'attendre?
Votre aide serait appréciée.
MODIFIER
Ajouté z pour afficher le fuseau horaire. Cela me rend encore plus confus parce que Mac dit son fuseau horaire est (AEDT) Australien, Heure Avancée de l'est, mais Java est (HNE). En tout cas encore résultat est différent, car il est UTC-5 heures.
new Date(c1.getTimeInMillis()))
est redondante. Utilisation c1.getTime()
.Également ajouter un
Z
à la fin de votre format pour voir votre fuseau horaire.OriginalL'auteur sunghun | 2014-01-13
Vous devez vous connecter pour publier un commentaire.
Vous avez probablement destinée à définir le fuseau horaire de votre formateur, pas le Calendrier (ou en plus le Calendrier, il n'est pas 100% clair ce que tu veux dire pour accomplir)! Le fuseau horaire utilisé pour créer la représentation humaine vient de la SimpleDateFormat. Tous les "fuseau horaire" de l'information est perdue à partir de l'Agenda lorsque vous reconvertir en java.util.Date en appelant
getTime()
.Le code:
est l'impression
14/01/2014 10:12:00
parce 11H UTC affiché dans Sydney (le fuseau horaire de votre formateur) est 10H du soir! (utiliser HH dans le format de 24 heures)Ce serait d'imprimer ce qu'il semble que vous vouliez faire:
Le concept de "UTC millisecondes" est vide de sens. Une quantité de millisecondes est juste un point fixe dans l'histoire, il n'a pas de fuseau horaire associé. Nous avons ajouter un fuseau horaire à elle de le convertir en lisible par l'homme des représentations.
edit: Oui, l'ambiguïté de l'utilisation de 'EST' pour les deux (US), Heure de l'est et de l' (Australien), Heure de l'est a été un piège en Java depuis toujours.
J'ai juste attendu Calendrier sera de retour UTC datetime lorsque je passe le fuseau horaire UTC paramètre de conversion HNE à l'UTC, mais il n'a pas l'air comme ça.
Qu'est ce que la plupart des gens s'attendent lors de leur première utilisation, il oui.
OriginalL'auteur Affe
Codes À Trois Lettres
Vous devriez éviter d'utiliser 3 ou 4 lettre de fuseau horaire codes comme
EST
ouIST
. Ils ne sont ni standard, ni unique.Utilisation fuseau horaire noms, surtout
Continent/CityOrRegion
commeAmerica/Montreal
ouAsia/Kolkata
.Joda-Time
La java.util.Date/Calendrier classes sont notoirement mauvaises. Éviter de les utiliser. Utiliser Joda-Time ou, dans Java 8, la nouvelle java.temps.* les classes défini par la JSR 310 et inspiré par Joda-Time.
Remarquez comment beaucoup plus simple et la plus évidente est la Joda-Time code indiqué ci-dessous. Joda-Time sait même comment comptez – janvier est de 1 (et non 0!
Fuseau Horaire
Dans Joda-Time, un DateTime instance connaît son propre fuseau horaire.
Cité De Sydney Australie a une norme de temps de 10 heures à l'avance de l'heure UTC/GMT, et une Heure d'été (DST) de 11 heures à l'avance. L'heure d'été s'applique à la date spécifiée par la question.
Conseil: Ne pas penser comme cela...
Penser comme cela...
Date du temps de travail devient plus facile et moins sujettes à l'erreur si vous pensez que, de travail, et de les stocker au format UTC/GMT. De convertir à la date localisés à temps pour la présentation dans l'interface utilisateur. Penser globalement, l'affichage local. Vos utilisateurs et de vos serveurs peuvent facilement passer à d'autres zones horaires, oublier vos propres fuseau horaire. Toujours spécifier un fuseau horaire, ne présumez jamais ou s'appuient sur par défaut.
Exemple De Code
Voici un exemple de code à l'aide de Joda-Time 2.3 et Java 8.
De vidage de la console...
Lors de l'exécuter...
OriginalL'auteur Basil Bourque