如何在SQLite中解析MySQL时间戳

时间:2018-05-03 03:36:19

标签: java mysql sqlite

我的Java应用程序使用我试图转换为SQLite的MySQL数据库。我能够很好地转换数据库本身,但是存在数据库中存储的时间戳问题。

具体来说,我的时间戳以默认的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;
        }

1 个答案:

答案 0 :(得分:0)

您必须定义日期格式,然后使用它将结果集中的时间戳解析为String。一个例子:

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并未直接提供任何此类方法。