在Java

时间:2018-08-12 08:51:46

标签: java mysql datetime

我必须找出一天中花费的持续时间。我需要询问的日期和进入和离开的时间花费多少?我有这样一张桌子。

#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

我无法考虑如何拆分数据以及如何从表中获取数据。非常感谢您的帮助。

1 个答案:

答案 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)。我已经运行了辅助方法,并且产生了我引用的输出。

您不应该得到这个答案,因为您的问题太广泛,不清楚并且研究不足。我再加一公里,给你至少一个答案。下次,请再走一公里,问一个好问题,以便写出好答案,而不必猜测,也不要太费力。这将是所有人的乐趣,尤其是自己。