2

我正在尝试将字符串解析为时间戳,因为我需要将此数据保存在 bbdd mysql 上。

String dateString: "2018-10-17T22:37:10.000+0000";
java.sql.Timestamp timeStampDate = null;
try {
        DateFormat formatter;
        formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
        Date date = (Date) formatter.parse(dateString);
        timeStampDate = new Timestamp(date.getTime());

    } catch (ParseException e) {
        log.debug("ERROR parser String to Timestamp to save bbdd. ", e.getMessage());
    }

当我运行我的应用程序时,我收到了这条消息:

错误解析器字符串到时间戳以保存 bbdd。无法解析的日期:“2018-10-17T22:37:10.000+0000”

有谁能够帮我?

4

2 回答 2

2

改变你的面具

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSS");

所以你有了

java.sql.Timestamp timeStampDate = null;
String dateString = "2018-10-17T22:37:10.000+0000";

try {
    DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
    Date date = formatter.parse(dateString);
    timeStampDate = new Timestamp(date.getTime());

} catch (ParseException e) {
    e.printStackTrace();
}

顺便说一句cast,你不应该需要Date

为我的懈怠道歉,我匆忙中没有测试输出,根据@andreas 评论,正确的掩码实际上是yyyy-MM-dd'T'HH:mm:ss.SSSZ

于 2018-11-14T00:10:36.363 回答
0

java.time

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSXX");
    String dateString = "2018-10-17T22:37:10.000+0000";
    OffsetDateTime odt = OffsetDateTime.parse(dateString, formatter);

    System.out.println("Parsed datetime: " + odt);

此代码的输出是:

解析日期时间:2018-10-17T22:37:10Z

为了保存到 MySQL 中,最好使用 datetime 对象,但是Timestamp该类存在设计问题并且现在已经过时了。很抱歉我没有使用 MySQL 的经验,但我认为以下应该可行:

    PreparedStatement ps = myDatabaseConnection.prepareStatement(
            "insert into my_table (my_timestamp) values (?)");
    ps.setObject(1, odt);

链接: Oracle 教程:日期时间解释如何使用java.time.

于 2018-11-14T14:30:21.257 回答