首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring-data-elasticsearch自定义日期格式错误

Spring-data-elasticsearch自定义日期格式错误
EN

Stack Overflow用户
提问于 2020-11-20 07:48:32
回答 3查看 1K关注 0票数 1

我使用spring elasticsearch 4.0.1和弹性集群7.6,当我用“yyyy”定义一个自定义模式的属性并试图检索一个值为"2014-06-11“的日期时,它会引发一个错误。

代码语言:javascript
复制
@Field(type = FieldType.Date, format = DateFormat.custom, pattern = "yyyy-MM-dd")
private Date startDate;

错误:

代码语言:javascript
复制
java.time.DateTimeException: Unable to obtain Instant from TemporalAccessor: {},ISO resolved to 2014-06-11 of type java.time.format.Parsed

我也试过了,但又犯了一个错误:

代码语言:javascript
复制
@Field(type = FieldType.Date, format = DateFormat.date_optional_time)
private Date startDate;

我在文档中看到,对于弹性7版本,我应该使用模式“uuuu”,但这也不起作用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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中的一个变化。

按以下方式更改注释并键入:

代码语言:javascript
复制
@Field(type = FieldType.Date, format = DateFormat.date)
private LocalDate startDate;

日期:时间上了解更多关于现代日期时间API的信息。

更多参考资料:

  1. Elasticsearch内置的日期时间格式
  2. DateTimeFormatter
票数 1
EN

Stack Overflow用户

发布于 2020-11-20 08:17:22

java.util.Date不是由年、月和日组成的普通日期,而是UTC时区中的瞬间。没有办法将"2014-06-11“及时转换为瞬间。应该用几个小时和几分钟?在什么时区?

就像Ole在评论中所写的,请使用java.time.LocalDate。这个类正是用于这个用例的:一年,一个月,一天。请停止使用旧的java.util.Date类。从Java 8开始,java.time包中就有类。

票数 1
EN

Stack Overflow用户

发布于 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64925636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档