如何将 java.sql.时间戳递增 14 天?

2022-09-01 12:32:40

我有一个应用程序,它使用时间戳作为sql选择的开始日期和结束日期的边界,我想用今年自一年的第一个星期一以来的周作为值和周数作为键来填充哈希图。我发现使用时间戳非常困难,并且我对添加86,400,000秒以增加一天的感觉不是很好,因为这没有考虑闰日,小时,秒。

我计划添加13天23小时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.Timestamp?


答案 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());

这将正确满足默认时区中的夏令时转换。如果需要,您可以告诉日历类使用不同的时区。


答案 2

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

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