我没有 Elasticsearch 方面的专业知识。但是,以下解决方案应该可以帮助您解决问题。
您可以提及格式,如文档页面uuuu-MM-dd'T'HH:mm:ss.SSSX['['z']']
上的示例所示。
演示:
import java.time.OffsetDateTime;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
String strDateTime = "2020-10-29T05:36:06.143Z[UTC]";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSX['['z']']");
ZonedDateTime zdt = ZonedDateTime.parse(strDateTime, formatter);
System.out.println(zdt);
OffsetDateTime odt = OffsetDateTime.parse(strDateTime, formatter);
System.out.println(odt);
}
}
输出:
2020-10-29T05:36:06.143Z[UTC]
2020-10-29T05:36:06.143Z
['['z']']
格式末尾的 使where和are literals成为'['z']'
可选的,同时指定时区。[
]
z
一些有用的信息:
您的日期时间字符串Z[UTC]
末尾Z
有一个重要的字母,指定Zulu
日期时间,它只是UTC
日期时间。换句话说,您的日期时间代表UTC
. ZonedDateTime
无需任何格式化程序即可解析它。
演示:
import java.time.ZonedDateTime;
public class Main {
public static void main(String[] args) {
String strDateTime = "2020-10-29T05:36:06.143Z[UTC]";
ZonedDateTime zdt = ZonedDateTime.parse(strDateTime);
System.out.println(zdt);
}
}
输出:
2020-10-29T05:36:06.143Z[UTC]
但是,看起来 Elasticsearch 不ZonedDateTime
用于解析日期时间字符串。文档页面提到默认格式是strict_date_optional_time
或者epoch_millis
如下引用:
可以自定义日期格式,但如果未指定格式,则使用默认格式:
“strict_date_optional_time||epoch_millis”
因此,为了符合默认格式,另一种方法是[UTC]
从日期时间字符串的末尾删除。在此更改之后,字符串可以被所有 , 和 解析ZonedDateTime
,OffsetDateTime
并且Instant
不需要任何格式化程序。
演示:
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZonedDateTime;
public class Main {
public static void main(String[] args) {
String strDateTime = "2020-10-29T05:36:06.143Z[UTC]";
strDateTime = strDateTime.substring(0, strDateTime.indexOf('['));
System.out.println("Trimmed date-time string: " + strDateTime);
ZonedDateTime zdt = ZonedDateTime.parse(strDateTime);
System.out.println(zdt);
OffsetDateTime odt = OffsetDateTime.parse(strDateTime);
System.out.println(odt);
Instant instant = Instant.parse(strDateTime);
System.out.println(instant);
}
}
输出:
Trimmed date-time string: 2020-10-29T05:36:06.143Z
2020-10-29T05:36:06.143Z
2020-10-29T05:36:06.143Z
2020-10-29T05:36:06.143Z