使用java中的Calendar遇到的时区问题

发布时间 2023-06-25 15:39:30作者: D·Felix
项目中有一个增加1小时的工具函数 结果今天测试出现了一个问题
原因是1986年的9月13号到14号之间会有一个时区的转换 需要程序特殊处理下
这是原函数的结果

  Sat Sep 13 22:00:00 CDT 1986
  Sat Sep 13 23:00:00 CDT 1986
  Sat Sep 13 23:00:00 CST 1986
  Sun Sep 14 00:00:00 CST 1986

  这是修改后想要的结果

  Sat Sep 13 22:00:00 CDT 1986
  Sat Sep 13 23:00:00 CDT 1986
  Sun Sep 14 00:00:00 CST 1986
  Sun Sep 14 01:00:00 CST 1986

 

/**
* 时间加减小时
*
* @param time 时间
* @param hour 正数加负数减
* @return
*/
public static Date addTimeOfHour(Date time, int hour) {

Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("Asia/Shanghai"));

// TODO <x>: 补充修改因1986年9.13.23时的cst和dst的时区转换问题处理
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
inputFormat.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
try {
time= inputFormat.parse(inputFormat.format(time));
} catch (ParseException e) {
e.printStackTrace();
}
// FIXME <x>: 修改因1986年9.13.23时的cst和dst的时区转换问题缺陷

calendar.setTime(time);
calendar.add(Calendar.HOUR_OF_DAY, hour);
return calendar.getTime();
}