将字符串转换为 LocalDateTime Java 8

Convert String to 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")));

Output : 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")));

Output : 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,请考虑模式中 single-quoting 的 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