我错了——真丢脸。strftime
只会读取 ISO 8601(或时间戳/朱利安)值。指定的格式不适用于输入- 它仅适用于输出值。
出于这个原因,数据库中的数据必须仍然具有自然排序才能进行排序。建议的格式是 ISO 8601(字符串)、时间戳(整数)和 julian-date(浮点数)。使用m/d/y
数据库中的日期不适用于范围比较,因为它不符合自然顺序。
strftime
和朋友只允许生成对比较有用的值之一——例如,可以从ISO 8601/timestamp/julian输入转换为custom/ISO 8601/timestamp/julian-date。但是,它们不能直接从自定义值转换。
修复数据库最简单的方法可能是使用 Python 之类的语言编写用于转换现有数据的脚本。还可以编写一个小型 Java 程序,利用SimpleDateFormat来解析现有值并使用推荐的类型之一将它们写回。
历史:
从控制台分块尝试(这将使必须更快地尝试查询)——第一个条件然后是第二个。什么返回什么,为什么?一旦每件作品都可以工作,那么将它们放在一起就可以了。
有多个 strftime 格式错误- 请参阅日期和时间以了解格式并再次检查字符串 :) 此外,如果使用更合理的日期格式(ISO 8601),则可以使用datetime
而不必担心明确指定格式。ISO 8601 值也可以作为字符串在词法上排序——这是一个额外的优势。
我不确定当作为参数传递给参数化查询(确实应该使用参数化查询)时,Java SQLite adatper 将如何处理 Date ......但无论如何,这是观察到的当前行为的次要问题。
快乐编码。