有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Sqlite日期时间类型问题

我试图从Java向sqlite数据库中插入datetime,但事情很奇怪

当我使用代码Calendar.getInstance().getTime()插入时,表中的值(例如)为1359960520718。 当我使用字符串2010-01-01插入到表中时,值为normal:2010-01-01

但是当我使用字符串2010-21-51插入到表中时,表中的值是2010-21-51。那是一个无效的日期。 怎么了


共 (2) 个答案

  1. # 1 楼答案

    这是因为SQLite是动态类型的。您可以将任何类型的值写入任何列,它不会抱怨—它可以以不同的类型静默地存储它

    根据documentation,日期时间可以存储为

    • 文本为ISO8601字符串(“YYYY-MM-DD HH:MM:SS.SSS”)
    • 实数和朱利安日一样,是指从公元前4714年11月24日格林威治正午开始的天数
    • 整数表示Unix时间,自1970-01-01 00:00:00 UTC以来的秒数

    在您的例子中,SQLite无法将无效日期转换为整数格式,而被迫将其存储为标准字符串。此日期无效,但SQLite不在乎

  2. # 2 楼答案

    您可以使用日历中的参数新建日期类型的日期。getInstance()。getTime(),例如:

    Date date = new Date(Calendar.getInstance().getTime()); 
    

    然后,也许应该使用SimpleDataFormat将日期格式化为所需的字符串,如:

    DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    String timeStr = df.format(date);
    

    然后,将timeStr插入表中。。。如果在数据库的insert语句中执行某些操作,则还可以使用其他方法