将字符串转换为LocalDateTime Java 8
我正在尝试将以下字符串转换为LocalDateTime:将字符串转换为LocalDateTime Java 8,java,string,localdatetime,datetimeformatter,Java,String,Localdatetime,Datetimeformatter,我正在尝试将以下字符串转换为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); 但我
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'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);
有关更多详细信息,请参阅
在给定的输入日期时间中,它使用了6位数字,所以不可能是纳秒。因为nano是1/100000000。所以它至少有9个数字。因此正确的格式应该是第二个分数,6位数字为“yyyy-MM-dd'HH:MM:ss.ssss”
最终结果比较:
带图案:“yyyy-MM-dd'HH:MM:ss.nnnnnn”
输出:2020-08-7T10:11:16.000908732
带有模式:“yyyy-MM-dd'HH:MM:ss.SSSSSS”
输出:2020-08-7T10:11:16.908732
对于给定的日期时间字符串模式,应更新为“yyyy-MM-dd'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);
有关更多详细信息,请参阅
在给定的输入日期时间中,它使用了6位数字,所以不可能是纳秒。因为nano是1/100000000。所以它至少有9个数字。因此正确的格式应该是第二个分数,6位数字为“yyyy-MM-dd'HH:MM:ss.ssss”
最终结果比较:
带图案:“yyyy-MM-dd'HH:MM:ss.nnnnnn”
输出:2020-08-7T10:11:16.000908732
带有模式:“yyyy-MM-dd'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 <代码>,请在模式中单独引用该代码>代码>,不要使用纳秒解析(<代码> 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”的结果将不等于解析的
字符串
,而是
2020-08-17T10:11:16.000908732
在这种情况下,您不需要指定日期时间格式,因为如果您根本不传递,将使用默认格式:
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 <代码>,请在模式中单独引用该代码>代码>,不要使用纳秒解析(<代码> 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”
的结果将不等于解析的字符串
,而是
2020-08-17T10:11:16.000908732
您是否看到T
在dateStr
中将日期与时间部分分开?你的模式不考虑它…另外,n
意味着纳秒,但是您的示例String
只包含6秒的分数,这使得S
在这里显得更合适。顺便说一下,您尝试解析的格式是Java提供的标准格式。您可以使用DateTimeFormatter.ISO_LOCAL_DATE_TIME
而不是使用自己的模式。您是否看到T
在dateStr
中将日期与时间部分分开?你的模式不考虑它…另外,n
意味着纳秒,但是您的示例String
只包含6秒的分数,这使得S
在这里显得更合适。顺便说一下,您尝试解析的格式是Java提供的标准格式。您可以使用DateTimeFormatter.ISO\u LOCAL\u DATE\u TIME
而不是使用自己的模式。是否打印了此解析的结果?它将不等于dateStr
!谢谢高拉夫。我之前确实尝试过将T添加到格式化程序中,但没有意识到我需要将其用单引号括起来,例如“T”@deHaar:是的,正确,它使用纳秒,精度为9位。它应该使用6位精度。Gaurav Jeswani-对于给定的日期时间字符串,不需要显式使用DateTimeFormatter
。检查其中不仅提到了解析此日期时间字符串的惯用方法,还添加了一些其他有价值的信息。您是否打印了此解析的结果?它将不等于dateStr
!谢谢高拉夫。我之前确实尝试过将T添加到格式化程序中,但没有意识到我需要将其用单引号括起来,例如“T”@deHaar:是的,正确,它使用纳秒,精度为9位。它应该使用6位精度。Gaurav Jeswani-对于给定的日期时间字符串,不需要显式使用DateTimeFormatter
。检查不仅提到了解析这个日期时间字符串的惯用方法,而且还添加了一些其他有价值的信息。回答得好!坚持下去!回答得好!坚持下去!