将字符串转换为LocalDateTime Java 8

问题描述

我正在尝试将以下字符串转换为LocalDateTime:

String dateStr = "2020-08-17T10:11:16.908732"; 

DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.nnnnnn");
LocalDateTime dateTime = LocalDateTime.parse(dateStr,format);

但是我遇到了以下错误

java.time.format.DateTimeParseException: Text '2020-08-17T10:11:16.908732' Could not be parsed at index 10
    at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
    at java.time.LocalDateTime.parse(LocalDateTime.java:492)

有人可以帮助建议我如何将字符串正确格式化为LocalDateTime吗?

非常感谢

解决方法

对于给定的DateTime字符串模式,应更新"yyyy-MM-dd'T'HH:mm:ss.nnnnnn"

所以代码应该像:

String dateStr = "2020-08-17T10:11:16.908732"; 

DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.nnnnnn");
LocalDateTime dateTime = LocalDateTime.parse(dateStr,format);

有关它的更多详细信息,您可以参考JavaDoc

在给定的输入DateTime中,它使用6位数字,因此不能是纳秒。因为nano是1/1000000000因此它将至少有9位数字。因此,正确的格式应该是6位数字的第二部分,例如“ yyyy-MM-dd'T'HH:mm:ss.SSSSSS”。

最终结果比较:

使用模式:“ yyyy-MM-dd'T'HH:mm:ss.nnnnnn”

System.out.println(LocalDateTime.parse("2020-08-17T10:11:16.908732",DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.nnnnnn")));

输出:2020-08-7T10:11:16.000908732

使用模式:“ yyyy-MM-dd'T'HH:mm:ss.SSSSSS”

System.out.println(LocalDateTime.parse("2020-08-17T10:11:16.908732",DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSS")));

输出:2020-08-7T10:11:16.908732

,

在这种情况下,您无需指定DateTimeFormatter,因为如果您根本不通过,则将使用默认值:

public static void main(String[] args) {
    String dateStr = "2020-08-17T10:11:16.908732";
    LocalDateTime dateTime = LocalDateTime.parse(dateStr);
    System.out.println(dateTime);
}

该代码将输出2020-08-17T10:11:16.908732

如果您坚持使用自定义DateTimeFormatter,请考虑T,方法是在模式中单引号,不要使用纳秒级解析(n)来解析秒(S),否则结果可能是错误的。

这样做:

public static void main(String[] args) {
    String dateStr = "2020-08-17T10:11:16.908732"; 
    DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSS");
    LocalDateTime dateTime = LocalDateTime.parse(dateStr,format);
    System.out.println(dateTime);
}

具有与上述相同的输出。

注意:
使用模式"yyyy-MM-dd'T'HH:mm:ss.nnnnnn"的结果将不等于解析的String,而是

2020-08-17T10:11:16.000908732

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...