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:

  1. UTC temps en millisecondes qui je peux avoir avec System.currentTimeMillis()
  2. Décalage horaire
  3. 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