Java 24-h字符串到ZonedDateTime

时间:2018-05-02 20:11:59

标签: java parsing datetime

我想将24小时字符串ex:13:05 2017-03-19转换为ZonedDateTime。目前我正试图这样做:

DateTimeFormatter zoneParser = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
this.startZoneTime = LocalDateTime.parse(date + " " +start, zoneParser).atZone(ZoneId.systemDefault());
this.endZoneTime = LocalDateTime.parse(date + " " + end, zoneParser).atZone(ZoneId.systemDefault());

但是得到一个解析异常。

2 个答案:

答案 0 :(得分:2)

13:05 2017-03-19的格式为HH:mm yyyy-MM-dd,而不是yyyy-MM-dd HH:mm:ss,因为您已经使用过 - 如果您尝试将其与上述代码一起使用,则会引发异常。该模式必须与您传入的字符串的格式相匹配。

我不知道date + " " + start引用内容是什么,因为您没有在您的问题中包含该内容,但基于您的代码,以下内容应该毫无问题地运行:

    String date = "13:05 2017-03-19";
    DateTimeFormatter zoneParser = DateTimeFormatter.ofPattern("HH:mm yyyy-MM-dd");
    this.startZoneTime = LocalDateTime.parse(date, zoneParser).atZone(ZoneId.systemDefault());
    this.endZoneTime = LocalDateTime.parse(date, zoneParser).atZone(ZoneId.systemDefault());

答案 1 :(得分:1)

    ZoneId zone = ZoneId.systemDefault();
    String dateString = "2017-03-19";
    String startTimeString = "13:05";
    String endTimeString = "15:25";

    LocalDate date = LocalDate.parse(dateString);
    ZonedDateTime startDateTime = date.atTime(LocalTime.parse(startTimeString)).atZone(zone);
    ZonedDateTime endDateTime = date.atTime(LocalTime.parse(endTimeString)).atZone(zone);

    System.out.println("Start " + startDateTime);
    System.out.println("End   " + endDateTime);

我的时区输出:

Start 2017-03-19T13:05+01:00[Europe/Copenhagen]
End   2017-03-19T15:25+01:00[Europe/Copenhagen]

不需要明确的格式化程序。