我的Java应用程序使用一个MySQL数据库,试图将其转换为SQLite。我能够很好地转换数据库本身,但是存储在数据库中的时间戳存在问题。
具体来说,我的时间戳以默认的MySQL格式存储:2018-04-14 16:33:00
现在,当尝试在SQLite中读取时间戳时,出现以下错误:ParseException: Unparseable date: "2018-04-14 16:33:00" 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}++)
有没有一种有效的方法来解决此问题,而无需实际修改数据库中存储的格式?
这是存在此问题的表之一的DDL:
create table agent_list_updates
(
update_id integer not null
primary key
autoincrement,
agent_count integer not null,
update_timestamp timestamp default CURRENT_TIMESTAMP,
user_id integer not null
constraint fk_agent_list_updates_users
references users
)
;
create index idx_agent_list_updates_idx_agent_list_updates_user_id
on agent_list_updates (user_id)
;
查询:
SELECT
agent_count,
update_timestamp
FROM agent_list_updates;
以及实际上导致错误的Java代码:
if (resultSet.next()) {
return resultSet.getTimestamp("update_timestamp");
} else {
return null;
}
最佳答案
您必须定义日期格式,然后使用它来将时间戳解析为来自resultSet的字符串。一个例子:
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
while(resultSet.next()) {
Date date = formatter.parse(resultSet.getString("update_timestamp"));
System.out.println(date);
}
因为没有
Timestamp
的默认构造函数,也可以使用以下方法来实现:new Timestamp(System.currentTimeMillis());
但是Date不直接提供任何此类方法。
关于java - 如何在SQLite中解析MySQL时间戳,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50146557/