【问题标题】:Java 24-h string to ZonedDateTime [closed]Java 24 小时字符串到 ZonedDateTime [关闭]
【发布时间】:2018-05-02 20:11:59
【问题描述】:

我想将 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());

但是得到一个解析异常。

【问题讨论】:

  • 1.该模式对您的示例没有意义/ 2.什么是“开始”,“结束”?
  • 为了清楚和简单起见,我将分别解析三个字符串 datestartend,然后组合成两个 LocalDateTime 对象。当然,最后转换为ZonedDateTime
  • 正如@azro 可能暗示的那样,这并不清楚。如果您愿意create a Minimal, Complete, and Verifiable example,我们可以更好、更准确地帮助您解决问题所在。还记得包含堆栈跟踪。
  • 我很抱歉缺少信息,我完全匆忙发布这个问题,忘记更改变量名称,以便它们更好地代表我想要实现的目标。 'start' 和 'end' 是开始时间和结束时间。

标签: java parsing datetime


【解决方案1】:

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

【讨论】:

  • 像魅力一样工作。我想我首先尝试将其转换为 12 小时时间,然后再转换为 zoneDateTime,因为我认为它不会以其他方式转换它。非常感谢您的帮助!
  • @BrijPatel 没问题,很乐意提供帮助!
【解决方案2】:
    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]

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 2013-10-24
    • 2012-09-04
    • 1970-01-01
    相关资源
    最近更新 更多