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 + ")");
}
}
问题出在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