java.time.format.DateTimeParseException:无法在索引0处分析

disbfnqx  于 2022-12-02  发布在  Java
关注(0)|答案(4)|浏览(118)

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

错误

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

代码

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

raogr8fs1#

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相符,OffsetTime是一个很少使用的类,我认为它确实存在,因为XML中有时会出现这样的情况。
还有一个内置的ISO_OFFSET_TIME化程序,但由于这是OffsetTime的默认格式,我们不需要指定它。

mutmk8jj

mutmk8jj2#

由于您的字符串中没有与日期相关的令牌,因此该操作失败。请查看官方文档中的示例。为了使其正常工作,您需要添加年/月/日数据:

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

q35jwt9p3#

您不能使用DateTimeFormatter.ISO_OFFSET_DATE_TIME,因为您的日期格式不符合该格式。
实际上,您甚至没有一个真实的的日期,因为没有日期组件,只有一个时间组件。您可以使用接收到的格式定义自己的SimpleDateFormat示例,但您必须处理这样一个事实,即如果没有日期信息,这些数据实际上并没有那么有用。例如,偏移量实际上并不能告诉我们那么多信息。因为它可能在某些地区的夏令时(DST)内,而这在很大程度上取决于实际日期,而不仅仅是时间。
你必须弄清楚这个数据的提供者到底是什么意思,因为现在你还没有足够的信息来把它解析成一个合适的日期。
如果这个数据只是表示一个简单的时间戳,比如说“我们的全球办公时间午餐时间是12:30”,那么你可以使用LocalTime类。这将是少数几个不带日期的时间字符串真正有用的情况之一。不过我有一种怀疑,这不是你的场景。

bvuwiixz

bvuwiixz4#

解决方法可能是

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
这是你要找的吗?

相关问题