中华人民共和国在1986年~1991年实行了夏令时制度,每年夏令时实行时间如下:
1986年5月4日至9月14日(1986年因是实行夏令时的第一年,从5月4日开始到9月14日结束) 1987年4月12日至9月13日, 1988年4月10日至9月11日, 1989年4月16日至9月17日, 1990年4月15日至9月16日, 1991年4月14日至9月15日。
Java的jdk在Date的toString中已经包含夏令时的计算,以下代码可以印证:
public static void main(String[] args) throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String sTime = "1986-09-13 22:00:00";
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
Date time = sdf.parse(sTime);
System.out.println(time.getTime());
System.out.println(time);
Calendar cd = Calendar.getInstance();
cd.setTime(time);
// 2小时以后是几点?
cd.add(Calendar.HOUR, 2);
time = cd.getTime();
System.out.println("------------------------------");
System.out.println(time.getTime());
System.out.println(time);
}
打印结果:
527000400000 Sat Sep 13 22:00:00 CDT 1986 ------------------------------ 527007600000 Sat Sep 13 23:00:00 CST 1986
分析
: 上面代码中1986-09-1322:00:00加上2小时,应该变为1986-09-13 24:00:00(或者1986-09-14 00:00:00),但由于在9月14日零点退出夏令时,时钟向后调整1小时,实际变为1986-09-13 23:00:00。
注意:从9月14日零点退出夏令时,java的Date.toString打印的时区也从CDT恢复为CST( ChinaStandard Time UT+8:00)。
又如:
wujianjun@work ~ $ date 2018年 08月 24日 星期五 19:20:41 CST wujianjun@work ~ $ date -d @579279600 1988年 05月 11日 星期三 00:00:00 CDT wujianjun@smzc ~ $ date -d @599587200 1989年 01月 01日 星期日 00:00:00 CST
结论
: 只要是在实行夏令时的时段都是 CDT
时间,其它都是 CST
观点仅代表自己,期待你的留言。