使用 Java 8 DateTimeFormatter 将字符串转换为 LocalDateTime
Converting String into LocalDateTime using Java 8 DateTimeFormatter
我正在使用 Java 8,我的 .txt
文件中有一个字符串,我想将其转换为 LocalDateTime
对象。
String time1 = "2017-10-06T17:48:23.558";
DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("dd.MM.yyyy. HH:mm:ss");
LocalDateTime alarmTime = LocalDateTime.parse(time1, formatter1);
System.out.println(time1);
这给了我这个例外:
Exception in thread "main" java.time.format.DateTimeParseException: Text '2017-10-06T17:48:23.558' could not be parsed at index 2
at java.time.format.DateTimeFormatter.parseResolved0(Unknown Source)
at java.time.format.DateTimeFormatter.parse(Unknown Source)
at java.time.LocalDateTime.parse(Unknown Source)
有什么想法吗?
P.S。请注意:
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd.MM.yyyy. HH:mm:ss");
DateTime dt = formatter.parseDateTime(string);
不适用于 Java 8.
编辑:我没有把问题说清楚,我的错:
我的 .txt
文件中有这个字符串,我需要将它转换为 LocalDateTime
对象以便将其保存到 class 对象中,但我需要它声明的格式是为了在 table 中打印出来。我不希望它以 "2017-10-06T17:48:23.558"
的原始格式打印出来。我希望它打印出这样的东西:"10.06.2017. 17:48:23"
使用 LocalDateTime.parse
没有任何额外的格式将其解析为 LocalDateTime
:
jshell> java.time.LocalDateTime ldt = java.time.LocalDateTime.parse("2017-10-06T17:48:23.558");
ldt ==> 2017-10-06T17:48:23.558
您的日期格式化程序模式有误。您需要提供与您传递的字符串相同的格式
示例:
String date = "2016-08-16T10:15:30+08:00";
ZonedDateTime result = ZonedDateTime.parse(date, DateTimeFormatter.ISO_DATE_TIME);
System.out.println("ZonedDateTime : " + result);
System.out.println("TimeZone : " + result.getZone());
LocalDate localDate = result.toLocalDate();
System.out.println("LocalDate : " + localDate);
你只是弄错了模式。如果您使用这样的模式,它将起作用:
DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");
这些模式在 javadoc 中有详细的记录:
https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html
你想要的输出格式("dd.MM.yyyy. HH:mm:ss"
)与输入的格式不一样,所以你不能用它来解析。
在这种特定情况下,输入在 ISO8601 format 中,因此您可以直接解析它。然后使用格式化程序将 LocalDateTime
对象格式化为您想要的格式:
String time1 = "2017-10-06T17:48:23.558";
// convert String to LocalDateTime
LocalDateTime localDateTime = LocalDateTime.parse(time1);
// parse it to a specified format
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy. HH:mm:ss");
System.out.println(localDateTime.format(formatter));
输出为:
06.10.2017. 17:48:23
PS: 如果输入的格式不同,您应该使用一个格式化程序来解析,另一个格式化程序。 Check the javadoc 查看所有可用格式。
DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");
我正在使用 Java 8,我的 .txt
文件中有一个字符串,我想将其转换为 LocalDateTime
对象。
String time1 = "2017-10-06T17:48:23.558";
DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("dd.MM.yyyy. HH:mm:ss");
LocalDateTime alarmTime = LocalDateTime.parse(time1, formatter1);
System.out.println(time1);
这给了我这个例外:
Exception in thread "main" java.time.format.DateTimeParseException: Text '2017-10-06T17:48:23.558' could not be parsed at index 2
at java.time.format.DateTimeFormatter.parseResolved0(Unknown Source)
at java.time.format.DateTimeFormatter.parse(Unknown Source)
at java.time.LocalDateTime.parse(Unknown Source)
有什么想法吗?
P.S。请注意:
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd.MM.yyyy. HH:mm:ss");
DateTime dt = formatter.parseDateTime(string);
不适用于 Java 8.
编辑:我没有把问题说清楚,我的错:
我的 .txt
文件中有这个字符串,我需要将它转换为 LocalDateTime
对象以便将其保存到 class 对象中,但我需要它声明的格式是为了在 table 中打印出来。我不希望它以 "2017-10-06T17:48:23.558"
的原始格式打印出来。我希望它打印出这样的东西:"10.06.2017. 17:48:23"
使用 LocalDateTime.parse
没有任何额外的格式将其解析为 LocalDateTime
:
jshell> java.time.LocalDateTime ldt = java.time.LocalDateTime.parse("2017-10-06T17:48:23.558");
ldt ==> 2017-10-06T17:48:23.558
您的日期格式化程序模式有误。您需要提供与您传递的字符串相同的格式
示例:
String date = "2016-08-16T10:15:30+08:00";
ZonedDateTime result = ZonedDateTime.parse(date, DateTimeFormatter.ISO_DATE_TIME);
System.out.println("ZonedDateTime : " + result);
System.out.println("TimeZone : " + result.getZone());
LocalDate localDate = result.toLocalDate();
System.out.println("LocalDate : " + localDate);
你只是弄错了模式。如果您使用这样的模式,它将起作用:
DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");
这些模式在 javadoc 中有详细的记录: https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html
你想要的输出格式("dd.MM.yyyy. HH:mm:ss"
)与输入的格式不一样,所以你不能用它来解析。
在这种特定情况下,输入在 ISO8601 format 中,因此您可以直接解析它。然后使用格式化程序将 LocalDateTime
对象格式化为您想要的格式:
String time1 = "2017-10-06T17:48:23.558";
// convert String to LocalDateTime
LocalDateTime localDateTime = LocalDateTime.parse(time1);
// parse it to a specified format
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy. HH:mm:ss");
System.out.println(localDateTime.format(formatter));
输出为:
06.10.2017. 17:48:23
PS: 如果输入的格式不同,您应该使用一个格式化程序来解析,另一个格式化程序。 Check the javadoc 查看所有可用格式。
DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");