【问题标题】:String to OffsetDateTime parse in java在Java中解析到OffsetDateTime的字符串
【发布时间】:2019-02-17 15:51:18
【问题描述】:

我正在尝试将日期字符串解析为OffsetDateTime,如下所示。

但我遇到了异常,

线程“主”java.time.format.DateTimeParseException 中的异常: 无法在索引 0 处解析文本“Mon Jun 18 00:00:00 IST 2012”

public class ParseExample {
    public static void main(String... args) throws ParseException {
        String dateStr = "Mon Jun 18 00:00:00 IST 2012";
        System.out.println(OffsetDateTime.parse(dateStr));
    }
}

谁能帮我解决这个错误。

谢谢。

【问题讨论】:

  • 如果可以,请避免依赖于解析三个字母的时区缩写,例如 IST。您可能会得到冰岛标准时间、爱尔兰夏令时间、以色列标准时间或其他时间。
  • 看起来你已经得到了在老式 java.util.Date 对象上调用 toString 的结果?如果是这样,最好将Date 转换为OffsetDateTime,而不是解析它的toStringyourOldfashionedDate.toInstant().atZone(ZoneId.systemDefault()).toOffsetDateTime().
  • Related: How to convert Date.toString back to Date? 右边有一个较长的链接问题列表,您可能需要查看它。

标签: java date datetime java-time


【解决方案1】:

ZonedDateTime

Mon Jun 18 00:00:00 IST 2012 应该是 ZonedDateTime,您可以使用自定义 DateTimeFormatter 对其进行解析,然后将其转换为 OffsetDateTime

DateTimeFormatter format = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);

OffsetDateTime offsetDateTime = ZonedDateTime.parse(dateStr, format).toOffsetDateTime();

【讨论】:

  • 您应该添加一条注释,说明尝试解析非唯一伪区域(如 IST)所固有的风险。可以是印度标准时间、爱尔兰标准时间或其他时间。而是使用标准化Continent/Region 格式的实时时区名称,例如Asia/Kolkata
猜你喜欢
  • 2017-11-02
  • 1970-01-01
  • 2011-01-16
  • 2012-08-06
  • 2014-10-19
  • 2016-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多