使用Resultset解析从数据库(类型为datetime)到LocalDateTime变量的字符串变量

时间:2016-07-25 04:03:51

标签: java datetime jdbc resultset

我试图转换存储在数据库中的String值(最初是LocalDateTime变量)(作为datetime)并将其解析为LocalDateTime变量。我已经用格式化程序尝试了它:

String dTP;
dTP=(rs.getString("arrivedate"));
            DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
            LocalDateTime dateTimeParked = LocalDateTime.parse(dTP,formatter);

没有格式化程序:

String dTP;
dTP=(rs.getString("arrivedate"));
LocalDateTime dateTimeParked = LocalDateTime.parse(dTP);

但我每次都会得到同样的错误:

Exception in thread "AWT-EventQueue-0" java.time.format.DateTimeParseException: Text '2016-07-09 01:30:00.0' could not be parsed at index 10

我的想法是索引10是日期和时间之间的空间。

有人可以帮我吗?我已经好几个小时了:(

3 个答案:

答案 0 :(得分:1)

导致问题的格式出错。请参考https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html.The ISO日期时间格式为'2011-12-03T10:15:30'。以下将为您提供想法

public static void main(String[] args) throws Exception {


    String isoDate = "2016-07-09T01:30:00.0";
    //  ISO Local Date and Time '2011-12-03T10:15:30'
    DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
    LocalDateTime dateTimeParked = LocalDateTime.parse(isoDate, formatter);
    System.out.println(dateTimeParked);




    String date = "2016-07-09 01:30:00.0";
    DateTimeFormatter formatterNew = DateTimeFormatter.ofPattern("yyyy-LL-dd HH:mm:ss.S");
    LocalDateTime dateTimeParkedNew = LocalDateTime.parse(date, formatterNew);      
    System.out.println(dateTimeParkedNew);

}

这打印: 2016-07-09T01:30 2016-07-09T01:30

答案 1 :(得分:1)

其他答案是正确的,您的字符串是SQL格式,它与ISO 8601格式的规范版本不同,在中间使用空格字符而不是T。因此,要么用T替换空格,要么定义用于解析的格式化模式。

使用智能对象,而不是哑字符串

但更大的问题是您正在从数据库中检索日期时间值作为字符串。您应该在Java中将日期时间类型的数据检索为日期时间类型。

对于符合JDBC 4.2及更高版本的驱动程序,您应该能够将setObjectgetObject与java.time对象一起使用。

对于TIMESTAMP WITHOUT TIME ZONE的SQL类型,请使用LocalDateTime。对于TIMESTAMP WITH TIME ZONE,请使用InstantZonedDateTime,具体取决于数据库。

LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class );

存储在数据库中。

myPreparedStatement.setObject( … , ldt ) ;

答案 2 :(得分:0)

试试这个格式化程序:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S");

我不确定毫秒部分(如果长度超过1个字符)。