我的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/

10-10 18:36