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

时间:2015-06-17 06:40:22

标签: 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());
     }

或者在某些情况下,我以字符串格式从中获取日期,例如2016-10-12然后我用action.setTodayInfo(session, 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) 
 )

3 个答案:

答案 0 :(得分:1)

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

您还可以使用Java使用SimpleDateFormat

格式化检索日期

答案 1 :(得分:0)

将1434473268231除以24 * 60 * 60 * 1000 * 365,你将得到45,这是1970年以来的年数。

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

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

答案 2 :(得分:0)

根据这个:https://www.sqlite.org/datatype3.html SQLLite并没有为DATETIME提供特殊类型。

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