如何解决将字符串转换为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 举报,一经查实,本站将立刻删除。