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
forYYYY-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