Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ResultSet getDate复制日期并失败,依此类推_Java_Mysql_Date_Resultset - Fatal编程技术网

Java ResultSet getDate复制日期并失败,依此类推

Java ResultSet getDate复制日期并失败,依此类推,java,mysql,date,resultset,Java,Mysql,Date,Resultset,知道这种行为的原因吗? 来自一个包含两列的测试MySQL表 使用此数据(日期从1日到31日) 通过Java检索日期 public static void executeQuery (Connection conn){ try { Statement stmt = conn.createStatement() ; String query = "SELECT recordId, testedDate FROM test_

知道这种行为的原因吗?

来自一个包含两列的测试MySQL表

使用此数据(日期从1日到31日)

通过Java检索日期

public static void executeQuery (Connection conn){
        try {
            Statement stmt = conn.createStatement() ;
            String query = "SELECT recordId, testedDate FROM test_date;";
            ResultSet rs = stmt.executeQuery(query) ;
            if(rs != null) {
                while(rs.next())
                    System.out.println(rs.getInt("recordId") + " - [" + rs.getDate("testedDate") + "]");
            }else {
                System.out.println("No results found!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
我得到了一个重复的日期在记录15和错误的日期从那里结束


正确的解决方案取决于您是真的只需要存储日期,还是需要存储时间点

  • 对于没有时间的日期,在MySQL中使用
    date
    ,在Java中使用
    LocalDate
  • 对于时间点,首选MySQL中的
    timestamp
    ,Java中的
    OffsetDateTime
    。MySQL以UTC格式存储
    timestamp
    值,因此它们定义了一个时间点
  • 如果无法更改MySQL中的数据类型,则使用
    datetime
    在Java中使用的正确类型是
    LocalDateTime
  • LocalDate
    OffsetDateTime
    LocalDateTime
    都是现代java日期和时间API java.time的一部分

    要从结果集中从java.time检索类型,请使用其
    getonobject
    方法,而不是
    getDate
    。例如,要获取
    LocalDate

           rs.getObject("testedDate", LocalDate.class)
    
    其他类型相同,只是将
    OffsetDateTime.class
    LocalDateTime.class
    作为第二个参数传递

    在任何情况下都不能使用
    java.sql.Date
    rs.getDate()
    java.sql.Date
    类是在已经设计得很糟糕的
    java.util.Date
    类之上的一个黑客攻击。幸运的是,两个
    Date
    类都早已过时(没有双关语)

    为什么一整天都错了? 我正在使用CST

    虽然我不能告诉你全部情况,但变化发生在3月14日,也就是北美大部分地区夏季时间(DST)开始的同一天,包括美洲/芝加哥和美洲/温尼伯时区

    虽然我想知道为什么它能抵消一整天而不仅仅是时间的转换

    打印
    java.sql.Date
    时,只打印日期,不打印时间。我敢打赌,在那些似乎早了一天的日子里,一天的时间在幕后是23:00。而其他的是00:00,所以内部的差异只有1小时

    链接
    解释如何使用java.time。

    正确的解决方案取决于您是真的只需要存储日期,还是需要存储时间点

  • 对于没有时间的日期,在MySQL中使用
    date
    ,在Java中使用
    LocalDate
  • 对于时间点,首选MySQL中的
    timestamp
    ,Java中的
    OffsetDateTime
    。MySQL以UTC格式存储
    timestamp
    值,因此它们定义了一个时间点
  • 如果无法更改MySQL中的数据类型,则使用
    datetime
    在Java中使用的正确类型是
    LocalDateTime
  • LocalDate
    OffsetDateTime
    LocalDateTime
    都是现代java日期和时间API java.time的一部分

    要从结果集中从java.time检索类型,请使用其
    getonobject
    方法,而不是
    getDate
    。例如,要获取
    LocalDate

           rs.getObject("testedDate", LocalDate.class)
    
    其他类型相同,只是将
    OffsetDateTime.class
    LocalDateTime.class
    作为第二个参数传递

    在任何情况下都不能使用
    java.sql.Date
    rs.getDate()
    java.sql.Date
    类是在已经设计得很糟糕的
    java.util.Date
    类之上的一个黑客攻击。幸运的是,两个
    Date
    类都早已过时(没有双关语)

    为什么一整天都错了? 我正在使用CST

    虽然我不能告诉你全部情况,但变化发生在3月14日,也就是北美大部分地区夏季时间(DST)开始的同一天,包括美洲/芝加哥和美洲/温尼伯时区

    虽然我想知道为什么它能抵消一整天而不仅仅是时间的转换

    打印
    java.sql.Date
    时,只打印日期,不打印时间。我敢打赌,在那些似乎早了一天的日子里,一天的时间在幕后是23:00。而其他的是00:00,所以内部的差异只有1小时

    链接
    解释如何使用java.time.

    检查时区偏移永远不要使用
    java.sql.Date
    rs.getDate()
    。对于数据类型为
    datetime
    的列,甚至更少
    java.sql.Date
    是对已经设计糟糕的
    java.util.Date
    类的一种攻击,幸运的是它早已过时。对于这种MySQL数据类型,请使用java.time中的
    LocalDateTime
    ,现代java日期和时间API,以及
    rs.getObject(“testedDate”,LocalDateTime.class)
    。您的时区是在北美还是在夏季(DST)3月14日开始的其他地方?@OleV.V。LocalDateTime起了作用,我使用CST,直到4月4日时间都在变化。。。尽管我想知道为什么它会抵消一整天而不仅仅是时间开关。检查时区偏移永远不要使用
    java.sql.Date
    rs.getDate()
    。对于数据类型为
    datetime
    的列,甚至更少
    java.sql.Date
    是对已经设计糟糕的
    java.util.Date
    类的一种攻击,幸运的是它早已过时。对于这种MySQL数据类型,请使用java.time中的
    LocalDateTime
    ,现代java日期和时间API,以及
    rs.getObject(“testedDate”,LocalDateTime.class)
    。您的时区是在北美还是在夏季(DST)3月14日开始的其他地方?@OleV.V。LocalDateTime起了作用,我使用CST,直到4月4日时间都在变化。。。虽然我想知道为什么它会抵消一整天的时间,而不仅仅是时间切换。我肯定在考虑改进这个遗留应用程序,因为它到处都在使用,非常感谢您的高质量响应。我肯定在考虑改进这个遗留应用程序