我必须找出一天中花费的持续时间。我需要询问的日期和进入和离开的时间花费多少?我有这样一张桌子。
#StartTime# # EndTime# # Day #
2018-07-16 23:00:00 2018-07-17 01:30:00 2018-07-16
2018-07-17 03:00:00 2018-07-17 04:30:00 2018-07-17
2018-07-17 13:00:00 2018-07-17 14:30:00 2018-07-17
2018-07-17 20:00:00 2018-07-17 21:30:00 2018-07-17
2018-07-17 22:00:00 2018-07-18 01:30:00 2018-07-18
我需要计算他在询问的一天中所花费的确切时间。例如,在2018-07-17。我需要他度过的日期和时间。结果应为
2018-07-17 00:01:00 2018-07-17 01:30:00
2018-07-17 03:00:00 2018-07-17 04:30:00
2018-07-17 13:00:00 2018-07-17 14:30:00
2018-07-17 20:00:00 2018-07-17 21:30:00
2018-07-17 22:00:00 2018-07-17 23:59:59
我无法考虑如何拆分数据以及如何从表中获取数据。非常感谢您的帮助。
答案 0 :(得分:0)
try (PreparedStatement stmt = yourDbConnection
.prepareStatement("select StartTime, EndTime, Day from your_table;");
ResultSet rs = stmt.executeQuery()) {
while (rs.next()) {
findTimeSpentInDay(rs.getObject("StartTime", LocalDateTime.class),
rs.getObject("EndTime", LocalDateTime.class),
rs.getObject("Day", LocalDate.class));
}
}
上面的代码段使用以下方法来查找时间:
private static void findTimeSpentInDay(
LocalDateTime startTime, LocalDateTime endTime, LocalDate day) {
LocalDateTime startOfDay = day.atStartOfDay();
LocalDateTime endOfDay = day.plusDays(1).atStartOfDay();
if (startTime.isBefore(startOfDay)) {
startTime = startOfDay;
}
if (endTime.isAfter(endOfDay)) {
endTime = endOfDay;
}
System.out.println("" + startTime + " " + endTime);
}
输出与您所说的不完全相同,主要是因为我不了解您的确切要求:
2018-07-16T23:00 2018-07-17T00:00 2018-07-17T03:00 2018-07-17T04:30 2018-07-17T13:00 2018-07-17T14:30 2018-07-17T20:00 2018-07-17T21:30 2018-07-18T00:00 2018-07-18T01:30
我认为它已经接近了,我要留给您将代码调整为所需的代码。
免责声明:从MySQL提取的代码已编译,但我尚未运行(手头没有安装MySQL)。我已经运行了辅助方法,并且产生了我引用的输出。
您不应该得到这个答案,因为您的问题太广泛,不清楚并且研究不足。我再加一公里,给你至少一个答案。下次,请再走一公里,问一个好问题,以便写出好答案,而不必猜测,也不要太费力。这将是所有人的乐趣,尤其是自己。