2010-09-12 57 views
1

我有一個字符串,代表UTC的時間。 考慮到夏令時,我需要將它轉換爲自東部時間午夜以來的毫秒。 例如,1月份的抵消時間爲5小時,但在6月份爲4小時。Java時區轉換

但是,下面的代碼顯示6月和1月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 2010-09-12 12:52:05

回答