2010-09-12 11 views
1

У меня есть строка, представляющая время в UTC. Мне нужно преобразовать его в длинное представление миллисекунд с полуночи в EST, учитывая переход на летнее время. Например, в январе смещение составляет 5 часов, но в июне 4 часа.Преобразование часового пояса Java

Однако приведенный ниже код показывает такое же смещение 5 часов как в июне, так и в январе. Переменная tzOffset = -18000000 (= -5 часов), независимо от даты месяца.

Просьба сообщить,

Спасибо!

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 + ")"); 
    } 

} 
+2

Проблема заключается в методе TimeZone.getOffset, который вызывает TimeZone.inDaylightTime(). inDaylightTime() всегда возвращает false. Вот описание ошибки: http://bugs.sun.com/view_bug.do;jsessionid=1d2668d1800d34ffffffffad585cf97e632b8?bug_id=6609359 – Serg

ответ

0

Вы можете украсть какой-либо код от this calendar conversion utility. Вам, вероятно, нужен getLocalTime. Отказ от ответственности: Я написал это.