J'ai une chaîne, représentant le temps en UTC. Je dois le convertir en long représentant des millisecondes depuis minuit à l'EST, compte tenu des heures d'été. Par exemple, en janvier, le décalage est de 5 heures, mais en juin 4 heures.Conversion de fuseau horaire Java
Toutefois, le code ci-dessous affiche le même décalage de 5 heures pour juin et janvier. La variable tzOffset = -18000000
(= -5 heures), quel que soit le mois de la date.
Veuillez nous aviser,
Merci!
package TimeConversion;
import java.text.SimpleDateFormat;
import java.util.*;
public class TimeConversion {
public static void main(String[] args) throws Exception {
String utcTime = "20100101120000000";
SimpleDateFormat sdfIn = new SimpleDateFormat("yyyyMMddHHmmssSSS");
sdfIn.setTimeZone(TimeZone.getTimeZone("UTC"));
long utcMillis = sdfIn.parse(utcTime).getTime();
long tzOffset = TimeZone.getTimeZone("EST").getOffset(utcMillis);
long estMillis = utcMillis + tzOffset;
long estMillisSinceMidnight = estMillis % 86400000;
System.out.println("utcTime = " + utcTime + "\nestMillisSinceMidnight = " + estMillisSinceMidnight + "(" + 24.0 * estMillisSinceMidnight/86.4e6 + ")");
}
}
Le problème est dans la méthode TimeZone.getOffset, qui appelle TimeZone.inDaylightTime(). inDaylightTime() renvoie toujours false. Voici la description du bug: http://bugs.sun.com/view_bug.do;jsessionid=1d2668d1800d34ffffffffad585cf97e632b8?bug_id=6609359 – Serg