0

我正在尝试将以下字符串转换为 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?

非常感谢

4

2 回答 2

1

对于您给定的 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 位数字,所以它不能是纳秒。因为纳米是 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

于 2020-08-17T10:21:45.167 回答
1

在这种情况下,您不需要指定 a 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.

如果您坚持使用 custom 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"将不等于 parsed String,而是

2020-08-17T10:11:16.000908732
于 2020-08-17T10:32:59.743 回答