Java 插入日期并以错误格式获取

Java 插入日期并以错误格式获取,java,sqlite,datetime,jdbc,Java,Sqlite,Datetime,Jdbc,我在表中插入当前日期。我有一个获取当前日期的方法: private static java.sql.Date getCurrentDate() { java.util.Date today = new java.util.Date(); return new java.sql.Date(today.getTime()); } 或者在某些情况下,我以字符串格式从from获取日期,例如2016-10-12,然后我使用action.setTodayInfo(

我在表中插入当前日期。我有一个获取当前日期的方法:

private static java.sql.Date getCurrentDate() {
        java.util.Date today = new java.util.Date();
        return new java.sql.Date(today.getTime());
     }
或者在某些情况下,我以字符串格式从from获取日期,例如
2016-10-12
,然后我使用
action.setTodayInfo(会话,getCurrentDate())调用此方法
向表中插入日期和一些布尔变量

public void setTodayInfo(HttpSession session, Date date) 
            throws SQLException, ClassNotFoundException {

        System.out.println("Initialize today's info...");

        String sq = "INSERT INTO IsSELECTED (date, morning, noon, night) VALUES (?, ?, ?, ?)";

    try {       
        Class.forName(typeDB);
        c = DriverManager.getConnection(path);            
        stm = c.prepareStatement(sq);

        PreparedStatement stm = c.prepareStatement(sq);

        stm.setDate(1, date);
        stm.setBoolean(2, FALSE);
        stm.setBoolean(3, FALSE);
        stm.setBoolean(4, FALSE);

        int rowsAffected = stm.executeUpdate();

    } catch (SQLException e) { 
    System.out.println(e.getMessage());
    } finally {
    if (stm != null) {
        stm.close();
    }
    if (c != null) {
        c.close();
    }
}          
}
当我在表格中查看时,日期字段的格式为1434473268231,而不是2015/06/16格式的当前日期

表格格式为:

CREATE TABLE "IsSELECTED"(
       "date" DATETIME PRIMARY KEY  NOT NULL  DEFAULT (CURRENT_DATE) ,
       "morning" BOOL NOT NULL  DEFAULT (0) ,
       "noon" BOOL NOT NULL  DEFAULT (0) ,
       "night" BOOL NOT NULL  DEFAULT (0) 
 )

将1434473268231除以24*60*60*1000*365,得到45,这是自1970年代开始以来的年份数

这意味着您看到的值是自1970年1月1日以来的毫秒数

这应该没问题-通常日期值在内部存储为毫秒,因为一些约定的时间点。

根据这一点:SQLLite实际上没有DATETIME的特殊类型


“应用程序可以选择以其中任何一种格式存储日期和时间,并使用内置的日期和时间功能在格式之间自由转换。”

存储日期时无需担心日期的格式。数据库将只存储日期实例,您可以使用其中一个实例在检索时对其进行格式化


您还可以使用SimpleDataFormat格式化检索日期

您使用的是mysql还是sqlite?这是不同的DBMS。底层数据库是什么?你在表中的“外观”如何?我使用SQLIte。我用SQLite Manager直接查看表当您再次(通过JDBC)从数据库中选择值时,您会得到什么。但是,如果我选择将日期存储为字符串,则无法在数据库中的日期之间进行搜索。您有两个选项。存储为number,并使用SQLlite的内置函数转换和执行查询。或者切换到另一个实际支持日期时间数据类型的数据库。。。我这里的主要问题是,我不能将日期插入为“yyyy-mm-dd”,然后使用字符串字段。