Obtenez réel de l'heure d'été de l'épargne en millisecondes
Je suis en train de faire une horloge analogique en Java Swing. Pour calculer l'horloge pointeur angles dont j'ai besoin:
- UTC temps en millisecondes qui je peux avoir avec
System.currentTimeMillis()
- Décalage horaire
- Fuseau horaire de l'heure d'été de l'épargne.
Pour 2) et 3) je pensais de l'aide
TimeZone.getDefault().getRawOffset()
et TimeZone.getDefault().getDSTSavings()
.
Mais getDSTSavings()
retourne toujours 3600000
indépendamment de la date actuelle est en hiver/heure d'été.
On dirait qu'il ne vérifie pour voir si la zone est sous DST
de gestion et si on en revient donc 3600000
sinon 0
.
Est-ce un bug getDSTSavings()
?
Si non, alors la seule façon d'obtenir de l'actuel DST
correction en millisecondes est d'utiliser le Calendrier de l'instance comme: Calendar.getInstance.get(Calendar.DST_OFFSET)
?
Calendar cal1 = Calendar.getInstance(TimeZone.getDefault()); //currentZone: CET/CEST +1/+2, GMT+1:00
System.out.println("System time, " + System.currentTimeMillis()); //UTC current milis
System.out.println("Calendar time, " + cal1.getTime().getTime()); //UTC current milis
System.out.println("Calendar milis, " + cal1.getTimeInMillis()); //UTC current milis
System.out.println("Calendar Zone Offset: " + cal1.get(Calendar.ZONE_OFFSET));
System.out.println("Calendar DST Offset: " + cal1.get(Calendar.DST_OFFSET));
System.out.println("Calendar Zone Offset: " + cal1.getTimeZone().getRawOffset());
System.out.println("Calendar DST Offset: " + cal1.getTimeZone().getDSTSavings());
System.out.println("");
//Winter time, CET
cal1.set(2010, 11, 15, 14, 15, 5);
System.out.println("Calendar milis, " + cal1.getTimeInMillis()); //UTC
System.out.println("Calendar Zone Offset: " + cal1.get(Calendar.ZONE_OFFSET)); //3600000 correct
System.out.println("Calendar DST Offset: " + cal1.get(Calendar.DST_OFFSET)); //0 correct
System.out.println("Calendar Zone Offset: " + cal1.getTimeZone().getRawOffset()); //3600000 correct
System.out.println("Calendar DST Offset: " + cal1.getTimeZone().getDSTSavings()); //3600000 wrong !!!
System.out.println("");
//Summer time - CEST
cal1.set(2010, 8, 15, 14, 15, 5);
System.out.println("Calendar milis, " + cal1.getTimeInMillis()); //UTC
System.out.println("Calendar Zone Offset: " + cal1.get(Calendar.ZONE_OFFSET)); //3600000 correct
System.out.println("Calendar DST Offset: " + cal1.get(Calendar.DST_OFFSET)); //3600000 correct
System.out.println("Calendar Zone Offset: " + cal1.getTimeZone().getRawOffset()); //3600000 correct
System.out.println("Calendar DST Offset: " + cal1.getTimeZone().getDSTSavings()); //3600000 correct
OriginalL'auteur zlatanmomic | 2010-11-08
Vous devez vous connecter pour publier un commentaire.
Voici un exemple de la façon dont l'heure d'été est utilisée:
Cette impression sera 3600000 si l'Heure d'été est en vigueur à Londres, à la date spécifiée. Sinon, il va imprimer 0.
OriginalL'auteur dogbane
La cal1 exemple l'-vous le retrouver sur la première ligne est en GMT+1 et qui ne changent pas, peu importe à quelle heure /date que vous définissez. Si vous avez besoin de vérifier le fuseau horaire actuel sur chaque tic-tac de l'horloge, vous devez récupérer un nouveau Calendrier de l'instance à chaque tick.
Comme un side note, si vous êtes prêt à ajouter une dépendance à votre projet - Joda Time est une merveilleuse Date et l'Heure de la bibliothèque.
OriginalL'auteur DaGGeRRz