微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将字符串转换为LocalDateTime Java 8

如何解决将字符串转换为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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。