直接将new Date()存入SQLite中是没有问题的,但调用result.getTimestamp()取出的时候报错
Caused by: java.text.ParseException: Unparseable date: "Fri Jul 26 13:43:02 CST 2024" does not match (\p{Nd}++)\Q-\E(\p{Nd}++)\Q-\E(\p{Nd}++)\Q \E(\p{Nd}++)\Q:\E(\p{Nd}++)\Q:\E(\p{Nd}++)\Q.\E(\p{Nd}++)
at org.sqlite.date.FastDateParser.parse(FastDateParser.java:299)
at org.sqlite.date.FastDateFormat.parse(FastDateFormat.java:490)
at org.sqlite.jdbc3.JDBC3ResultSet.getTimestamp(JDBC3ResultSet.java:532)
... 74 more
点开源码,发现源码中调用了FastDateFormat.parse()方法
构造函数中发现了默认的格式
所以在存入日期的时候也使用这个格式,调用FastDateFormat.format()方法
FastDateFormat dateFormat = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss.SSS", Calendar.getInstance().getTimeZone());
String date = dateFormat.format(timestamp);
其他问题:
1. 关于时区的问题:在设置日期格式的时候传入Calendar.getInstance().getTimeZone()可以自动获取当前时区。
2. 关于getDate、getTime、getTimestamp的问题:
rs.getDate()返回日期部分
rs.getTime()返回时间部分
rs.getTimestamp()返回时间和日期
总结:
1.SQLite存入日期前使用FastDateFormat调整格式和时区
2.SQLite获取完整日期调用getTimestamp()