使用Java 8 DateTimeFormatter

时间:2017-10-17 09:14:28

标签: java datetime datetime-format java-time datetime-parsing

我正在使用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对象,以便将其保存到类对象中,但我需要它以所述的格式才能把它打印在桌子里面。我不希望它以"2017-10-06T17:48:23.558"的原始格式打印出来。我希望它打印出类似这样的内容:"10.06.2017. 17:48:23"

5 个答案:

答案 0 :(得分:3)

您想要输出的格式("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查看所有可用格式。

答案 1 :(得分:1)

使用forkJoin而无需任何其他格式将其解析为import { Observable} from 'rxjs/Observable'; import 'rxjs/add/observable/forkJoin'; console.log("Owk ooo let's play small with observables "); // this is just to form an asynchronous process asyncSimulator(data: number): Observable < any > { return Observable.create(observer => { setTimeout(() => { observer.next("data to send can be object or anything" + data); console.log("am done"); observer.complete(); //to show we are done with our processing }, 2000); }) } /** call the all asynchronous process here, like so with Fork Join */ Observable.forkJoin([ this.asyncSimulator(1), this.asyncSimulator(2), this.asyncSimulator(3), ]) .subscribe(results => { let async1 = result[0]; let async2 = result[1]; let async3 = result[1]; console.log("results is an array", results); });

LocalDateTime.parse

答案 2 :(得分:1)

您的日期格式化程序模式错误。您需要提供与传递的字符串相同的格式

示例:

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);

答案 3 :(得分:1)

你的模式错了。如果您使用这样的模式,它将起作用:

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

答案 4 :(得分:0)

DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");