destinationLQL 2024-02-06 21:48 采纳率: 100%
浏览 1
已结题

时间比较问题,很疑惑,不知道啥原因

img


本应该查不到结果的。然后我把表中时间改成5号才能够查不到数据,难道6号17点比6号21点还大?

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-06 21:49
    关注

    引自免费微信小程序:皆我百晓生

    在Java中处理时间比较时,通常会使用java.time包中的类如LocalDateTime来进行精确的时间比较。如果您的问题涉及数据库查询且日期/时间字段的比较结果出乎意料,这可能是因为:

    1. 时间格式或解析问题: 确保您在进行比较和存储时正确地解析和格式化了时间。例如,如果您将时间字符串转换为LocalDateTime对象,确保使用正确的格式模式。

    2. 时区问题: 如果您的时间和数据库中的时间处于不同的时区,则直接比较可能会导致误解。在比较之前,请确保它们都在同一个时区内。

    3. 数据库存储格式与比较方式不匹配: 检查数据库中时间字段的类型(如TIMESTAMP、DATETIME等)以及JDBC查询时如何处理这些字段。可能数据库存储的是UTC时间,而你比较时按照本地时间。

    假设您的代码片段如下(这里仅作示例,实际情况请根据您的查询语句调整):

    // 假设这是你要比较的时间点
    LocalDateTime localDateTimeToCompare = LocalDateTime.of(2023, 6, 6, 17, 0);
    
    // 假设从数据库获取的时间点
    LocalDateTime dateTimeFromDB = //... 从数据库获取的时间
    
    // 进行比较
    if (localDateTimeToCompare.isAfter(dateTimeFromDB)) {
        System.out.println("Database time is earlier.");
    } else if (localDateTimeToCompare.isBefore(dateTimeFromDB)) {
        System.out.println("Database time is later.");
    } else {
        System.out.println("Both times are equal.");
    }
    
    // 查询示例,确保在SQL查询中正确比较时间
    String sql = "SELECT * FROM your_table WHERE your_date_time_column <= ?";
    PreparedStatement pstmt = connection.prepareStatement(sql);
    pstmt.setObject(1, localDateTimeToCompare.atZone(ZoneId.systemDefault()).toInstant().toTimestamp());
    ResultSet rs = pstmt.executeQuery();
    

    请注意,在实际应用中,你需要确保查询时将Java时间转换成适合数据库的时间格式,并考虑时区差异。如果你的问题确实在于Java代码中的时间比较逻辑,请提供更多关于数据库查询的具体代码和数据表结构,以便进一步分析问题所在。

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

报告相同问题?

问题事件

  • 系统已结题 2月15日
  • 已采纳回答 2月7日
  • 创建了问题 2月6日

悬赏问题

  • ¥15 百度cookie扫码登录器
  • ¥15 微机原理汇编语言debug调试实验
  • ¥23 matlab可以把相图转换为庞加莱映射吗
  • ¥20 有偿,学生成绩信息管理系统
  • ¥15 Arduino电机和openmv连接异常
  • ¥15 Arcgis河网分级报错
  • ¥200 java+appium2.1+idea
  • ¥20 请帮我做一个EXE的去重TXT文本
  • ¥15 工价表引用工艺路线,应如何制作py和xml文件
  • ¥15 根据历史数据,推荐问题类型