Java应用从MySQL迁移至SQLite:MySQL时间戳解析异常
解决MySQL迁移SQLite后Java解析时间戳的ParseException问题
这个问题很典型——本质是日期解析器的格式模式和SQLite返回的时间戳字符串不匹配。MySQL默认的yyyy-MM-dd HH:mm:ss格式用空格分隔日期和时间,而你的Java代码里大概率用了带T分隔符的ISO标准格式(比如yyyy-MM-dd'T'HH:mm:ss),导致解析时触发格式不匹配错误。
下面是具体的解决步骤和代码示例:
1. 修正日期解析的格式模式
不管你用的是Java 8+的新日期API(推荐)还是旧的SimpleDateFormat,都要把模式改成和MySQL/SQLite的时间戳格式完全一致:
用Java 8+ DateTimeFormatter(推荐,线程安全)
// 注意这里是空格分隔,不是'T' DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); // 从ResultSet读取字符串后解析 String timestampStr = resultSet.getString("your_timestamp_column"); LocalDateTime dateTime = LocalDateTime.parse(timestampStr, formatter);
用旧的SimpleDateFormat(不推荐,线程不安全)
如果项目还在使用旧的日期类,可以这样调整:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String timestampStr = resultSet.getString("your_timestamp_column"); Date date = sdf.parse(timestampStr);
2. 优先用getString读取时间戳
SQLite的JDBC驱动对Timestamp类型的处理逻辑和MySQL驱动有差异,直接调用resultSet.getTimestamp()可能会出现隐式格式转换问题。建议先读取字符串再手动解析,这样对格式的控制更精准。
3. 处理格式不兼容的边缘情况
如果数据库中存在少量格式不一致的时间戳(比如部分记录缺少秒数),可以启用宽松解析模式兼容这类情况:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") .withResolverStyle(ResolverStyle.LENIENT); LocalDateTime dateTime = LocalDateTime.parse(timestampStr, formatter);
这样调整后,应该就能正常解析2018-04-14 16:33:00这类格式的时间戳了。
内容的提问来源于stack exchange,提问作者Zephyr




