customer_viper 2015-06-26 07:32 采纳率: 50%
浏览 3262
已采纳

为何指定时间加上1小时,个别会出错?

为了说明问题,请看下面一小段代码
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class Cs {
public static void main(String[] args) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date d = format.parse("1986-09-13 21:00:00");
Calendar c = Calendar.getInstance();
for(int i=0;i<5;i++){
c.setTime(d);
c.add(Calendar.HOUR_OF_DAY, 1);
Timestamp ts = new Timestamp(c.getTimeInMillis());
d=ts;
System.out.println(ts);
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

运行结果为
1986-09-13 22:00:00.0

1986-09-13 23:00:00.0

1986-09-13 23:00:00.0

1986-09-14 00:00:00.0
1986-09-14 01:00:00.0

为何第一次 1986-09-13 23:00:00.0没有变化
谢谢!

  • 写回答

2条回答

  • JonsonJiao 2015-06-26 08:17
    关注

    先说解决办法吧,使用SimpleDateFormat的时候要加上时区,比如你的代码加上这一句就没有问题了:

    format.setTimeZone(TimeZone.getTimeZone("GMT+8"));
    

    再说原因:
    你挑的这个时间跟夏令时有关,你可以看下这里关于中国实行夏令时的日期说明:
    http://www.qingyunju.com/name/xiashizhi.htm

    你的时间正好是夏令时与正常时间切换的点,上面的链接中说我国是从凌晨2时开始算,但貌似java中直接按日期算了,没有精确到时,你可以试试其他几个实行夏令时的年份。
    具体的源代码我还没有找到。有了我再告诉你。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件