【问题标题】:java.time.format.DateTimeParseException: could not be parsed at index 0java.time.format.DateTimeParseException:无法在索引 0 处解析
【发布时间】:2018-12-12 18:44:21
【问题描述】:

我正在尝试将字符串转换为时间戳。 我的字符串包含时间和时区 ('05:03:05.875+02:00') 但我收到以下错误:

错误

java.time.format.DateTimeParseException: 文本'05:03:05.875+02:00' 无法在索引 0 处解析

代码

 String timewithZone= "05:03:05.875+02:00";
DateTimeFormatter formatter=DateTimeFormatter.ISO_OFFSET_DATE_TIME;
final ZonedDateTime a2=ZonedDateTime.parse(timewithZone,formatter);

【问题讨论】:

    标签: java date datetime


    【解决方案1】:

    失败是因为您的字符串没有与日期相关的标记。查看官方documentation中的示例。为了使其正常工作,您需要添加年/月/日数据:

    String timewithZone= "2018-07-3T05:03:05.875+02:00";
    

    【讨论】:

    • 感谢您的回复。我从动态 xml 文件导入数据,因此无法更改或添加任何内容。有什么解决办法吗?
    • 我尝试了“iso_offset_time”,但由于秒数而引发异常
    【解决方案2】:

    您不能使用 DateTimeFormatter.ISO_OFFSET_DATE_TIME,因为您的日期格式不符合该格式。

    事实上,你甚至没有真正的日期,因为没有日期成分,只有时间成分。 您可以使用收到的格式定义您自己的 SimpleDateFormat 实例,但您必须处理这样一个事实,即如果没有日期信息,这些数据实际上并不是那么有用。例如,该偏移量并不能真正告诉我们太多,因为它可能在某些地区的夏令时 (DST) 中或不在。这在很大程度上取决于实际的 DATE,而不仅仅是时间。

    您必须找出这些数据的提供者对此意味着什么,因为现在您根本没有足够的信息来真正将其解析为正确的日期。

    如果此数据仅表示一个简单的时间戳,例如用于说“我们的全球办公时间午餐时间是 12:30”,那么您可以使用 LocalTime 类。这将是少数没有日期的时间字符串非常有用的情况之一。不过我有一个偷偷摸摸的怀疑这不是你的情况。

    【讨论】:

      【解决方案3】:

      解决方法可能是

      DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss.SSSz");
      String str = "05:03:05.875+02:00";
      LocalTime time = LocalTime.parse(str, formatter);
      System.out.println(time);
      

      我尝试了你得到的格式的代码,

      输出:

      05:03:05.875

      这是你要找的吗?

      【讨论】:

        【解决方案4】:
            String timewithZone = "05:03:05.875+02:00";
            OffsetTime time = OffsetTime.parse(timewithZone);
            System.out.println("Parsed into " + time);
        

        这个输出

        解析为 05:03:05.875+02:00

        您的字符串包含时间和偏移量,但没有日期。这很好地符合ISO_OFFSET_DATE_TIMEZonedDateTime,但与OffsetTime 一致,我认为这是一个很少使用的类,正是因为这样的事情有时会出现在XML 中。

        还内置了一个ISO_OFFSET_TIME 格式化程序,但由于这是OffsetTime 的默认格式,我们不需要指定它。

        【讨论】:

          猜你喜欢
          • 2018-04-04
          • 1970-01-01
          • 2020-06-25
          • 2020-02-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-09
          • 1970-01-01
          相关资源
          最近更新 更多