使用Java 8将字符串转换为LocalDateTime DateTimeFormatter
我正在使用Java 8,并且在我的.txt
文件中有一个字符串,我想将其转换为LocalDateTime
对象。使用Java 8将字符串转换为LocalDateTime DateTimeFormatter
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
对象以便将其保存到类对象中,但我需要它以所述的格式将其打印出来以便在表格中打印出来。我不希望它以原始格式打印出"2017-10-06T17:48:23.558"
。我希望它打印出来是这样的:"10.06.2017. 17:48:23"
你想要的格式输出("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));
输出是:
2017年6月10日。 17时48分23秒
PS:如果输入的是在一个不同的格式,你应该使用一个格式化来解析和一个又一个的格式。 Check the javadoc查看所有可用的格式。
是的,这个作品,谢谢,并且我很抱歉没有让我的第一篇文章清楚...将此行'System.out.println(localDateTime.format(formatter));'在javafx中工作? – mdenci
@mdenci实际上最好将format方法的结果设置为String,然后用它做任何你需要的东西 – 2017-10-17 09:53:17
使用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
这是可行的,因为字符串采用标准的[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)格式,即LocalDateTime。解析(...)'理解。 – Jesper
您的日期格式模式是错误的。你需要给相同的格式,该字符串要传递
例子:
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);
我发布了我正在进行的项目 –
的工作示例,编辑后的文章有效,但您之前发布的文章确实无效。但仍然,这不是我要找的,但无论如何,也许我会需要它后 – mdenci
你刚刚的模式是错误的。
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
DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");
你做了一个完全错误的模式... – Phoenix
在你的日期索引'2'没有'。'按照您的模式暗示 – A4L
'DateTimeFormat.forPattern'来自Joda-Time,而'DateTimeFormatter.ofPattern'来自Java 8'java.time' API。你想使用哪一个? – 2017-10-17 09:33:31