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