我的一段代码如下:
String date = "2009-04-05";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
if (date==null||date.equals("")||date.equals("null")){
date = sdf.format(new Date());
}
Date riqi = null;
try {
riqi = SimpleDateFormat.getDateInstance().parse(date);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String[] ids = TimeZone.getAvailableIDs(-8*60*60*1000);
if(ids.length==0){
System.exit(0);
}
SimpleTimeZone pdt = new SimpleTimeZone(-8*60*60*1000,ids[0]);
pdt.setStartRule(Calendar.APRIL,1,Calendar.SUNDAY,2*60*60*1000);
pdt.setEndRule(Calendar.OCTOBER,-1,Calendar.SUNDAY,2*60*60*1000);
Calendar calendar = new GregorianCalendar(pdt);
calendar.setTime(riqi);
calendar.add(Calendar.DAY_OF_MONTH,-1);
String qianyitian = sdf.format(calendar.getTime());
calendar.add(Calendar.DAY_OF_MONTH,1);
calendar.add(Calendar.DAY_OF_MONTH,1);
String houyitian = sdf.format(calendar.getTime());
System.out.println("上一天:"+qianyitian + " 下一天:"+ houyitian);
输出的结果是:上一天:2009-04-04 下一天:2009-04-05
但是在算别的日期时没出现这个问题,我试了一下,一年大约有一天会这样,如:“2008-04-06”的答案也会算错。这是为什么呢?
String date = "2009-04-05";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
if (date==null||date.equals("")||date.equals("null")){
date = sdf.format(new Date());
}
Date riqi = null;
try {
riqi = SimpleDateFormat.getDateInstance().parse(date);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String[] ids = TimeZone.getAvailableIDs(-8*60*60*1000);
if(ids.length==0){
System.exit(0);
}
SimpleTimeZone pdt = new SimpleTimeZone(-8*60*60*1000,ids[0]);
pdt.setStartRule(Calendar.APRIL,1,Calendar.SUNDAY,2*60*60*1000);
pdt.setEndRule(Calendar.OCTOBER,-1,Calendar.SUNDAY,2*60*60*1000);
Calendar calendar = new GregorianCalendar(pdt);
calendar.setTime(riqi);
calendar.add(Calendar.DAY_OF_MONTH,-1);
String qianyitian = sdf.format(calendar.getTime());
calendar.add(Calendar.DAY_OF_MONTH,1);
calendar.add(Calendar.DAY_OF_MONTH,1);
String houyitian = sdf.format(calendar.getTime());
System.out.println("上一天:"+qianyitian + " 下一天:"+ houyitian);
输出的结果是:上一天:2009-04-04 下一天:2009-04-05
但是在算别的日期时没出现这个问题,我试了一下,一年大约有一天会这样,如:“2008-04-06”的答案也会算错。这是为什么呢?
以前的代码是我从别的地方搜的,到底为什么这样我也不知道,谁能给我个解释