Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.time.format.DateTimeParseException:Text';2016-08-30T06:18:17:698-0600';无法在索引24处分析_Java_Datetime_Java 8_Jodatime - Fatal编程技术网

java.time.format.DateTimeParseException:Text';2016-08-30T06:18:17:698-0600';无法在索引24处分析

java.time.format.DateTimeParseException:Text';2016-08-30T06:18:17:698-0600';无法在索引24处分析,java,datetime,java-8,jodatime,Java,Datetime,Java 8,Jodatime,这是我的java8这个日期字符串的代码“2016-08-30T06:18:17:698-0600” 使用带有截断日期字符串的LocalDate可以解决这个问题,但我不能简单地删除Time并使用LocalDate而不是LocalDateTime 请说明这里出了什么问题。我还需要解释为什么你的答案有效。区域偏移中的负号是区域偏移表达式的一部分,你不应该将其作为文本转义。区域偏移中的负号是区域偏移表达式的一部分,您不应该将其作为文本转义。如果您将模式更改为yyyy-MM-dd'T'HH:MM:ss.S

这是我的
java8
这个日期字符串的代码
“2016-08-30T06:18:17:698-0600”

使用带有截断日期字符串的
LocalDate
可以解决这个问题,但我不能简单地删除
Time
并使用
LocalDate
而不是
LocalDateTime


请说明这里出了什么问题。我还需要解释为什么你的答案有效。

区域偏移中的负号是区域偏移表达式的一部分,你不应该将其作为文本转义。

区域偏移中的负号是区域偏移表达式的一部分,您不应该将其作为文本转义。

如果您将模式更改为
yyyy-MM-dd'T'HH:MM:ss.SSSZ
它将打印
2016-08-30T06:18:17.123

但是在您的代码中,当正确的日期为
时,日期以毫秒为单位

完整代码:

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
        String attDate = "2016-08-30T06:18:17.123-0600";
        //attDate = attDate.substring(0, 19);
        System.out.println("####attask date: "+attDate);
        LocalDateTime dt = LocalDateTime.parse(attDate, formatter);
        System.out.println(dt);
####attask date: 2016-08-30T06:18:17.123-0600
2016-08-30T06:18:17.123
输出:

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
        String attDate = "2016-08-30T06:18:17.123-0600";
        //attDate = attDate.substring(0, 19);
        System.out.println("####attask date: "+attDate);
        LocalDateTime dt = LocalDateTime.parse(attDate, formatter);
        System.out.println(dt);
####attask date: 2016-08-30T06:18:17.123-0600
2016-08-30T06:18:17.123

如果您将图案更改为
yyyy-MM-dd'T'HH:MM:ss.SSSZ
它将打印
2016-08-30T06:18:17.123

但是在您的代码中,当正确的日期为
时,日期以毫秒为单位

完整代码:

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
        String attDate = "2016-08-30T06:18:17.123-0600";
        //attDate = attDate.substring(0, 19);
        System.out.println("####attask date: "+attDate);
        LocalDateTime dt = LocalDateTime.parse(attDate, formatter);
        System.out.println(dt);
####attask date: 2016-08-30T06:18:17.123-0600
2016-08-30T06:18:17.123
输出:

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
        String attDate = "2016-08-30T06:18:17.123-0600";
        //attDate = attDate.substring(0, 19);
        System.out.println("####attask date: "+attDate);
        LocalDateTime dt = LocalDateTime.parse(attDate, formatter);
        System.out.println(dt);
####attask date: 2016-08-30T06:18:17.123-0600
2016-08-30T06:18:17.123

两种格式
YYYY-MM-DD'HH:MM:ss:SSS-XXX
yyy-MM-DD'HH:MM:ss:SSS-XXX
都不起作用您不需要它,
XX
已经翻译成
-0600
。您正在执行的操作意味着Java正在查找
“2016-08-30T06:18:17:698--06:00”
。顺便说一下,您收到的错误消息证实了这一点。在索引24(即位置25),您拥有您的
0600
中的第一个
0
。Java认为您在模式中指定的文本
-
后面必须跟一个
+
-
,这是偏移量的一部分。但是您立即提供了一个数字(
0600
),因此解析失败。两种格式
YYYY-MM-DD都不是'HH:MM:ss:SSS-XXX
YYYY-MM-DD不是'HH:MM:ss:SSS-XXX
不起作用您不需要它,
XX
已经转换为
-0600
。您正在执行的操作意味着Java正在查找
“2016-08-30T06:18:17:698--06:00”
。顺便说一下,您收到的错误消息证实了这一点。在索引24(即位置25),您拥有您的
0600
中的第一个
0
。Java认为您在模式中指定的文本
-
后面必须跟一个
+
-
,这是偏移量的一部分。但是您立即提供了一个数字(
0600
),因此解析失败。
无法解析:无法从TemporalAccessor获取LocalDateTime:{DayOfYear=30,WeekBasedYear[WeekFields[SUNDAY,1]]=2016,OffsetSeconds=-21600,MonthOfYear=8},ISO解析为06:18:17.698,类型为java.time.format.Parsed
for
YYYY-MM-DD'HH:MM:ss:SSSXX
无法解析:无法从临时访问器获取LocalDateTime:{DayOfYear=30,WeekBasedYear[WeekFields[SUNDAY,1]]=2016,OffsetSeconds=-21600,MontYear=8},ISO解析为06:18:17.698,类型为java.time.format.Parsed,用于
YYYY-MM-DD'HH:MM:ss:SSSXX
毫秒的模式也起作用。因为这是我们从API获得的格式,所以我们必须遵循它。以下是工作的模式
yyyy-MM-dd'T'HH:MM:ss:SSSZ
毫秒的模式也工作。因为这是我们从API获得的格式,所以我们必须遵循它。以下是工作模式
yyyy-MM-dd'HH:MM:ss:SSSZ