Error java.time.format.DateTimeParseException: Text '2016-08-18 14:27:15.103+02' could not be parsed, unparsed text found at index 10
下面是我的字符串:convertdate:'2016-08-18 14:27:15.103+02'
和我的代码:
public static LocalDate conversorStringToLocalDateTime(String convertDate) throws ParseException {
LocalDate dateTime =LocalDate.parse(convertDate);
return dateTime;
}
我想不是太复杂,买我看不出错误。字符串中的+02可能是原因吗?
OffsetDateTime odt = OffsetDateTime.parse ( "2016-08-18 14:27:15.103+02" , DateTimeFormatter.ofPattern ( "yyyy-MM-dd HH:mm:ss.SSSX" ) ) ;
greg-449对这个问题的回答是正确的(使用日期对象作为日期时间值),但不是解决方案。
该答案使用LocalDateTime
,这不必要地丢弃了关于从UTC偏移量的有价值的信息。LocalDateTime
并不表示时间线上的特定时刻,只是关于可能时刻的模糊概念,这取决于调整到特定的时区。
+02
是UTC的偏移量,意思是“比UTC提前两个小时”。所以在UTC中,这个同时时刻的一天中的时间是12小时,比你的14小时少2小时。这确实代表了时间线上的一个特定时刻。此偏移量是您使用localdatetime
而不是offsetdatetime
丢弃的有价值的信息。
字符串的格式是SQL格式,接近标准的ISO 8601格式。只需将中间的空格替换为T
即可。默认情况下,java.time类使用ISO 8601格式,因此不需要指定格式模式。
String input = "2016-08-18 14:27:15.103+02";
String inputModified = input.replace ( " " , "T" );
不幸的是,Java8在解析偏移量值(缩写为一小时)或偏移量值(省略了小时和分钟之间的冒号)方面有一个bug。修正于Java9中。但是在Java8中,我们需要调整输入。
// Workaround for Java 8 where 2-digit offset fails parsing. Fixed in Java 9.
int lengthOfAbbreviatedOffset = 3;
if ( inputModified.indexOf ( "+" ) == ( inputModified.length () - lengthOfAbbreviatedOffset ) ) {
// If third character from end is a PLUS SIGN, append ':00'.
inputModified = inputModified + ":00";
}
if ( inputModified.indexOf ( "-" ) == ( inputModified.length () - lengthOfAbbreviatedOffset ) ) {
// If third character from end is a PLUS SIGN, append ':00'.
inputModified = inputModified + ":00";
}
OffsetDateTime odt = OffsetDateTime.parse ( inputModified );
System.out.println ( "input: " + input + " | inputModified: " + inputModified + " | odt: " + odt );
或者,指定格式模式。当使用此格式模式时,偏移量解析错误不会产生影响。
DateTimeFormatter f = DateTimeFormatter.ofPattern ( "yyyy-MM-dd HH:mm:ss.SSSX" );
OffsetDateTime odt = OffsetDateTime.parse ( input , f );
从Postgres中,您应该将值作为日期-时间对象而不是字符串来检索。
如果您的JDBC驱动程序符合JDBC4.2,则可以调用ResultSet::GetObject
以获取即时
或offsetDateTime
。如果没有,则调用ResultSet::GetTimestamp
获取java.sql.Timestamp
,然后通过调用Timestamp对象的Toinstant
立即转换为java.time。
我使用Java8来解析日期并找出两个日期之间的差异。 以下是我的片段: 当我运行时,我得到了错误: java.time.format.DateTimeParseException:无法在索引3解析文本
问题内容: 我有一个包含“否”和“日期”的表格。这将是动态形式。在Spring Boot JPA中进行批处理更新时,出现了“ java.time.format.DateTimeParseException:无法解析文本‘03 / 03 / 2020,03 / 03/2020’,在索引10处找到了未解析的文本”的异常 在这里,ABC是实体类,我可以以dd / mm / yyyy格式获取日期值,并将其
我得到:类型的ISO
我无法理解为什么当我通过的文本符合格式时,我会得到DateTimeParseException错误。下面是导致该问题的代码: 奇怪的是。每当我查询用户一段时间(让我们以00:02:30为例),它就会完全按照我想要的方式运行。但是当我使用我的方法(从文本文件中提取时间)时,它会出现错误: 线程“main”java.time.format.DateTimeParseException中出现异常:无法分
我正在尝试解析这样的日期: 该日期是来自远程服务的响应。我并不是真的期望Z,我也不是真的需要它,所以我想知道处理这个案件的正确方法是什么。
我正在开发新闻应用程序,我已经将从现在到那个日期的运行时间进行了转换,但当我运行代码时,我的适配器类中出现了以下异常 JAVA时间总体安排DateTimeParseException:无法在索引0处分析文本“09/10/2019”,无法在索引19处找到未分析的文本 低于我的适配器类 以下是JSON响应: