下面是出问题的junit代码,大家帮看看,是什么原因导致多出一个小时的时间?
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;import org.junit.Test;public class testDate {
@Test
public void testDate1() throws ParseException {
//正常的
String sTime = "1991-04-06 00:00:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date time = sdf.parse( sTime );
Calendar cd = Calendar.getInstance();
cd.setTime(time);
cd.add(Calendar.DATE, 7);
time = cd.getTime();
System.out.println(sdf.format(time));
//这个日期增加7天后,为什么会多一个小时?这天是1991年4月第一个星期天
sTime = "1991-04-07 00:00:00";
time = sdf.parse( sTime );
cd = Calendar.getInstance();
cd.setTime(time);
cd.add(Calendar.DATE, 7);
time = cd.getTime();
System.out.println(sdf.format(time));
//正常的
sTime = "1991-04-08 00:00:00";
time = sdf.parse( sTime );
cd = Calendar.getInstance();
cd.setTime(time);
cd.add(Calendar.DATE, 7);
time = cd.getTime();
System.out.println(sdf.format(time));
//这个日期增加7天后,为什么会多一个小时?这天是1990年4月第二个星期天,但是位置和1991-4月出问题的星期一样
sTime = "1990-04-08 00:00:00";
time = sdf.parse( sTime );
cd = Calendar.getInstance();
cd.setTime(time);
cd.add(Calendar.DATE, 7);
time = cd.getTime();
System.out.println(sdf.format(time));
//正常的,这天是1992年4月第一个星期天
sTime = "1992-04-05 00:00:00";
time = sdf.parse( sTime );
cd = Calendar.getInstance();
cd.setTime(time);
cd.add(Calendar.DATE, 7);
time = cd.getTime();
System.out.println(sdf.format(time));
//我对几个年份,几个月份抽样检查过,好像就这2个年份的月份的日期出问题,不知道是什么原因。
//有了解的朋友麻烦帮解释下。
}
}
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;import org.junit.Test;public class testDate {
@Test
public void testDate1() throws ParseException {
//正常的
String sTime = "1991-04-06 00:00:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date time = sdf.parse( sTime );
Calendar cd = Calendar.getInstance();
cd.setTime(time);
cd.add(Calendar.DATE, 7);
time = cd.getTime();
System.out.println(sdf.format(time));
//这个日期增加7天后,为什么会多一个小时?这天是1991年4月第一个星期天
sTime = "1991-04-07 00:00:00";
time = sdf.parse( sTime );
cd = Calendar.getInstance();
cd.setTime(time);
cd.add(Calendar.DATE, 7);
time = cd.getTime();
System.out.println(sdf.format(time));
//正常的
sTime = "1991-04-08 00:00:00";
time = sdf.parse( sTime );
cd = Calendar.getInstance();
cd.setTime(time);
cd.add(Calendar.DATE, 7);
time = cd.getTime();
System.out.println(sdf.format(time));
//这个日期增加7天后,为什么会多一个小时?这天是1990年4月第二个星期天,但是位置和1991-4月出问题的星期一样
sTime = "1990-04-08 00:00:00";
time = sdf.parse( sTime );
cd = Calendar.getInstance();
cd.setTime(time);
cd.add(Calendar.DATE, 7);
time = cd.getTime();
System.out.println(sdf.format(time));
//正常的,这天是1992年4月第一个星期天
sTime = "1992-04-05 00:00:00";
time = sdf.parse( sTime );
cd = Calendar.getInstance();
cd.setTime(time);
cd.add(Calendar.DATE, 7);
time = cd.getTime();
System.out.println(sdf.format(time));
//我对几个年份,几个月份抽样检查过,好像就这2个年份的月份的日期出问题,不知道是什么原因。
//有了解的朋友麻烦帮解释下。
}
}
我也讲不清楚
http://zhidao.baidu.com/question/25866910.html?si=1
再等等,看有没有朋友可以给出解决方案。。
1941-03-16 01:00:00 ~ 1941-09-30 23:00:00
1986-05-04 01:00:00 ~ 1986-09-13 23:00:00
1987-04-12 01:00:00 ~ 1987-09-12 23:00:00
1988-04-10 01:00:00 ~ 1988-09-10 23:00:00
1989-04-16 01:00:00 ~ 1989-09-16 23:00:00
1990-04-15 01:00:00 ~ 1990-09-15 23:00:00
1991-04-14 01:00:00 ~ 1991-09-14 23:00:00前段表示那一天开始的时间,也就是说那一天的 0 点在该时区中是不存在。后段表示那一天结束的时间,这个时间计算很复杂:如果当前时间为:1986-09-13 23:00:00,增加 1 小时后为 1986-09-14 00:00:00
如果当前时间为:1986-09-13 22:00:00,增加 2 小时后为 1986-09-13 23:00:00,因为 1986-09-13 23:00:00 是夏令时结束时间,时钟需要回拨。由于每个时区的夏令时都不一样,编程语言中的夏令时算法非常复杂。幸好中国从 1992 年开始停止使用夏令时。这里是夏令时时区数据页面:http://www.twinsun.com/tz/tz-link.htm
这里可以找到各时区最新的夏令时数据:ftp://elsie.nci.nih.gov/pub/