有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何增加一个java。sql。14天的时间戳?

我有一个应用程序,它以时间戳作为sql选择的开始日期和结束日期的边界,我想填充一个hashmap,从今年的第一个星期一开始的周数作为值,周数作为键。我发现使用时间戳非常困难,我对增加86400000秒来增加一天的时间感觉不太好,因为这不包括闰日、小时、秒

我计划增加13天23小时59分59秒,这样我就可以在地图上按周查找开始日期作为键,然后使用开始日期获取结束日期

所以我想尝试得到这样的东西:

Week  startDate              endDate
1     2011-01-03 00:00:00    2011-01-16 23:59:59
2     2011-01-17 00:00:00    2011-01-30 23:59:59

地图中的前两列,最后一列在查找后进行计算。如何安全地增加java。sql。时间戳


共 (3) 个答案

  1. # 1 楼答案

    java.sql.Timestamp ts = ...
    Calendar cal = Calendar.getInstance();
    cal.setTime(ts);
    cal.add(Calendar.DAY_OF_WEEK, 14);
    ts.setTime(cal.getTime().getTime()); // or
    ts = new Timestamp(cal.getTime().getTime());
    

    这将正确地满足默认时区的白天转换。如果需要,可以告诉Calendar类使用不同的时区

  2. # 2 楼答案

    private Long dayToMiliseconds(int days){
        Long result = Long.valueOf(days * 24 * 60 * 60 * 1000);
        return result;
    }
    
    public Timestamp addDays(int days, Timestamp t1) throws Exception{
        if(days < 0){
            throw new Exception("Day in wrong format.");
        }
        Long miliseconds = dayToMiliseconds(days);
        return new Timestamp(t1.getTime() + miliseconds);
    }
    
  3. # 3 楼答案

    值得注意的是,14天并不总是14*24*3600秒。当你有夏令时,这个时间可以短一个小时,也可以长一个小时。从历史上看,它可能比这复杂得多

    相反,我建议使用JodaTime或日历来执行时区相关的计算