Java中的时间仅仅是一个简单的长值(自1970年以来毫秒)没有关于时区的任何信息。 java.util.Date
和java.sql.Date
也将内部的日期/时间存储为自1970年以来的毫秒,但具有UTC时区。
时区进场时,当你格式化输出,或当你从一个字符串分析日期/时间的日期/时间。您通过-Duser.timezone
设置的时区信息将在当时使用。
所以它应该工作以及一个小的测试也显示内容:
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
c.set(2013, 2, 30, 23, 0, 0);
long start = c.getTimeInMillis();
long oneHour = 1000 * 60 * 60;
long t = start;
for (long i = 0; i < 5; i++) {
System.out.println(new Date(t));
t = t + oneHour;
}
}
使用-Duser.timezone=GMT
它将打印:(无开关)
Sat Mar 30 23:00:00 GMT 2013
Sun Mar 31 00:00:00 GMT 2013
Sun Mar 31 01:00:00 GMT 2013
Sun Mar 31 02:00:00 GMT 2013
Sun Mar 31 03:00:00 GMT 2013
使用-Duser.timezone=CET
它将打印:(开关在凌晨2点)
Sat Mar 30 23:00:00 CET 2013
Sun Mar 31 00:00:00 CET 2013
Sun Mar 31 01:00:00 CET 2013
Sun Mar 31 03:00:00 CEST 2013
Sun Mar 31 04:00:00 CEST 2013
使用-Duser.timezone=EET
它将打印:(东欧洲时间,一小时后,CET)
Sat Mar 30 23:00:00 EET 2013
Sun Mar 31 00:00:00 EET 2013
Sun Mar 31 01:00:00 EET 2013
Sun Mar 31 02:00:00 EET 2013
Sun Mar 31 04:00:00 EEST 2013
非常感谢您的详细解答和解决我的问题。 – AlexWerz 2013-02-20 14:07:29