我使用spring elasticsearch 4.0.1和弹性集群7.6,当我用“yyyy”定义一个自定义模式的属性并试图检索一个值为"2014-06-11“的日期时,它会引发一个错误。
@Field(type = FieldType.Date, format = DateFormat.custom, pattern = "yyyy-MM-dd")
private Date startDate;错误:
java.time.DateTimeException: Unable to obtain Instant from TemporalAccessor: {},ISO resolved to 2014-06-11 of type java.time.format.Parsed我也试过了,但又犯了一个错误:
@Field(type = FieldType.Date, format = DateFormat.date_optional_time)
private Date startDate;我在文档中看到,对于弹性7版本,我应该使用模式“uuuu”,但这也不起作用。
发布于 2020-11-20 09:42:56
Elasticsearch 7使用现代日期时间API。下面是https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#reference的摘录
从TemporalAccessor派生的属性必须具有FieldType.Date类型的@Field注释,或者必须为该类型注册自定义转换器。如果您使用的是自定义日期格式,则需要在一年中使用uuuu而不是yyyy。这是由于Elasticsearch 7中的一个变化。
按以下方式更改注释并键入:
@Field(type = FieldType.Date, format = DateFormat.date)
private LocalDate startDate;在日期:时间上了解更多关于现代日期时间API的信息。
更多参考资料:
发布于 2020-11-20 08:17:22
java.util.Date不是由年、月和日组成的普通日期,而是UTC时区中的瞬间。没有办法将"2014-06-11“及时转换为瞬间。应该用几个小时和几分钟?在什么时区?
就像Ole在评论中所写的,请使用java.time.LocalDate。这个类正是用于这个用例的:一年,一个月,一天。请停止使用旧的java.util.Date类。从Java 8开始,java.time包中就有类。
发布于 2021-01-01 13:52:35
这个问题已由4.0.5解决。SpringBoot2.3.5使用4.0.5。(SpringBoot2.3.5可在29.2020年10月上市)
https://github.com/spring-projects/spring-data-elasticsearch/pull/538 DATAES-953 - DateTimeException关于将即时或日期转换为…
https://github.com/spring-projects/spring-data-elasticsearch/releases/tag/4.0.5.RELEASE
https://stackoverflow.com/questions/64925636
复制相似问题