format
在 JSON 文档中,日期表示为字符串。Elasticsearch 使用一组预配置的格式来识别这些字符串并将其解析为表示 UTC 时间的自 Epoch 以来毫秒数的长整型值。
除了内置格式之外,您还可以使用熟悉的 yyyy/MM/dd
语法指定自己的自定义格式。
PUT my-index-000001
{
"mappings": {
"properties": {
"date": {
"type": "date",
"format": "yyyy-MM-dd"
}
}
}
}
许多支持日期值的 API 也支持日期数学表达式,例如 now-1m/d
— 当前时间减去一个月,并向下舍入到最近的一天。
支持完全自定义的日期格式。这些格式的语法在DateTimeFormatter 文档中有说明。
请注意,虽然内置的周日期格式使用周年的 ISO 定义,但使用字段说明符 Y
、W
或 w
的自定义格式化程序使用 JDK 语言环境定义的周年。这可能导致内置格式与自定义格式对于周日期产生不同的值。
以下大多数格式都有一个 strict
伴随格式,这意味着年、月和日的组成部分必须分别精确使用 4、2 和 2 位数字,可能需要在前面填充零。例如,5/11/1
这样的日期将被视为无效,需要重写为 2005/11/01
才能被日期解析器接受。
要使用它们,您需要在日期格式名称前加上 strict_
,例如使用 strict_date_optional_time
而不是 date_optional_time
。
这些严格的日期格式在日期字段动态映射时特别有用,可以确保不会将不相关的字符串错误地映射为日期。
下表列出了支持的所有默认 ISO 格式
epoch_millis
- 一个格式化程序,用于表示自 epoch 以来的毫秒数。请注意,此时间戳受 Java
Long.MIN_VALUE
和Long.MAX_VALUE
限制。 epoch_second
- 一个格式化程序,用于表示自 epoch 以来的秒数。请注意,此时间戳受 Java
Long.MIN_VALUE
和Long.MAX_VALUE
除以 1000(一秒中的毫秒数)的限制。 date_optional_time
或strict_date_optional_time
-
一个通用的 ISO 日期时间解析器,其中日期必须至少包含年份,而时间(由
T
分隔)是可选的。示例:yyyy-MM-dd'T'HH:mm:ss.SSSZ
或yyyy-MM-dd
。NOTE: When using `date_optional_time`, the parsing is lenient and will attempt to parse numbers as a year (e.g. `292278994` will be parsed as a year). This can lead to unexpected results when paired with a numeric focused format like `epoch_second` and `epoch_millis`. It is recommended you use `strict_date_optional_time` when pairing with a numeric focused format.
strict_date_optional_time_nanos
- 一个通用的 ISO 日期时间解析器,其中日期必须至少包含年份,而时间(由
T
分隔)是可选的。秒的小数部分具有纳秒级分辨率。示例:yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ
或yyyy-MM-dd
。 basic_date
- 一个基本格式化程序,用于表示四位年份、两位月份和两位日期的完整日期:
yyyyMMdd
。 basic_date_time
- 一个基本格式化程序,用于组合基本日期和时间,用 T 分隔:
yyyyMMdd'T'HHmmss.SSSZ
。 basic_date_time_no_millis
- 一个基本格式化程序,用于组合基本日期和时间(不含毫秒),用 T 分隔:
yyyyMMdd'T'HHmmssZ
。 basic_ordinal_date
- 一个格式化程序,用于表示四位年份和三位年内日期的完整序号日期:
yyyyDDD
。 basic_ordinal_date_time
- 一个格式化程序,用于表示四位年份和三位年内日期的完整序号日期和时间:
yyyyDDD'T'HHmmss.SSSZ
。 basic_ordinal_date_time_no_millis
- 一个格式化程序,用于表示四位年份和三位年内日期的完整序号日期和时间(不含毫秒):
yyyyDDD'T'HHmmssZ
。 basic_time
- 一个基本格式化程序,用于表示两位小时、两位分钟、两位秒、三位毫秒以及时区偏移:
HHmmss.SSSZ
。 basic_time_no_millis
- 一个基本格式化程序,用于表示两位小时、两位分钟、两位秒以及时区偏移:
HHmmssZ
。 basic_t_time
- 一个基本格式化程序,用于表示两位小时、两位分钟、两位秒、三位毫秒以及以 T 为前缀的时区偏移:
'T'HHmmss.SSSZ
。 basic_t_time_no_millis
- 一个基本格式化程序,用于表示两位小时、两位分钟、两位秒以及以 T 为前缀的时区偏移(不含毫秒):
'T'HHmmssZ
。 basic_week_date
或strict_basic_week_date
- 一个基本格式化程序,用于表示四位周年份、两位周序和一位周内日期的完整日期:
xxxx'W'wwe
。 basic_week_date_time
或strict_basic_week_date_time
- 一个基本格式化程序,用于组合基本周年份日期和时间,用 T 分隔:
xxxx'W'wwe'T'HHmmss.SSSZ
。 basic_week_date_time_no_millis
或strict_basic_week_date_time_no_millis
- 一个基本格式化程序,用于组合基本周年份日期和时间(不含毫秒),用 T 分隔:
xxxx'W'wwe'T'HHmmssZ
。 date
或strict_date
- 一个格式化程序,用于表示四位年份、两位月份和两位日期的完整日期:
yyyy-MM-dd
。 date_hour
或strict_date_hour
- 一个格式化程序,用于组合完整日期和两位小时:
yyyy-MM-dd'T'HH
。 date_hour_minute
或strict_date_hour_minute
- 一个格式化程序,用于组合完整日期、两位小时和两位分钟:
yyyy-MM-dd'T'HH:mm
。 date_hour_minute_second
或strict_date_hour_minute_second
- 一个格式化程序,用于组合完整日期、两位小时、两位分钟和两位秒:
yyyy-MM-dd'T'HH:mm:ss
。 date_hour_minute_second_fraction
或strict_date_hour_minute_second_fraction
- 一个格式化程序,用于组合完整日期、两位小时、两位分钟、两位秒和三位秒的小数部分:
yyyy-MM-dd'T'HH:mm:ss.SSS
。 date_hour_minute_second_millis
或strict_date_hour_minute_second_millis
- 一个格式化程序,用于组合完整日期、两位小时、两位分钟、两位秒和三位秒的小数部分:
yyyy-MM-dd'T'HH:mm:ss.SSS
。 date_time
或strict_date_time
- 一个格式化程序,用于组合完整日期和时间,用 T 分隔:
yyyy-MM-dd'T'HH:mm:ss.SSSZ
。 date_time_no_millis
或strict_date_time_no_millis
- 一个格式化程序,用于组合完整日期和时间(不含毫秒),用 T 分隔:
yyyy-MM-dd'T'HH:mm:ssZ
。 hour
或strict_hour
- 一个格式化程序,用于表示两位小时:
HH
hour_minute
或strict_hour_minute
- 一个格式化程序,用于表示两位小时和两位分钟:
HH:mm
。 hour_minute_second
或strict_hour_minute_second
- 一个格式化程序,用于表示两位小时、两位分钟和两位秒:
HH:mm:ss
。 hour_minute_second_fraction
或strict_hour_minute_second_fraction
- 一个格式化程序,用于表示两位小时、两位分钟、两位秒和三位秒的小数部分:
HH:mm:ss.SSS
。 hour_minute_second_millis
或strict_hour_minute_second_millis
- 一个格式化程序,用于表示两位小时、两位分钟、两位秒和三位秒的小数部分:
HH:mm:ss.SSS
。 ordinal_date
或strict_ordinal_date
- 一个格式化程序,用于表示四位年份和三位年内日期的完整序号日期:
yyyy-DDD
。 ordinal_date_time
或strict_ordinal_date_time
- 一个格式化程序,用于表示四位年份和三位年内日期的完整序号日期和时间:
yyyy-DDD'T'HH:mm:ss.SSSZ
。 ordinal_date_time_no_millis
或strict_ordinal_date_time_no_millis
- 一个格式化程序,用于表示四位年份和三位年内日期的完整序号日期和时间(不含毫秒):
yyyy-DDD'T'HH:mm:ssZ
。 time
或strict_time
- 一个格式化程序,用于表示两位小时、两位分钟、两位秒、三位秒的小数部分以及时区偏移:
HH:mm:ss.SSSZ
。 time_no_millis
或strict_time_no_millis
- 一个格式化程序,用于表示两位小时、两位分钟、两位秒以及时区偏移:
HH:mm:ssZ
。 t_time
或strict_t_time
- 一个格式化程序,用于表示两位小时、两位分钟、两位秒、三位秒的小数部分以及以 T 为前缀的时区偏移:
'T'HH:mm:ss.SSSZ
。 t_time_no_millis
或strict_t_time_no_millis
- 一个格式化程序,用于表示两位小时、两位分钟、两位秒以及以 T 为前缀的时区偏移(不含毫秒):
'T'HH:mm:ssZ
。 week_date
或strict_week_date
- 一个格式化程序,用于表示四位周年份、两位周序和一位周内日期的完整日期:
YYYY-'W'ww-e
。这使用 ISO 周日期定义。 week_date_time
或strict_week_date_time
- 一个格式化程序,用于组合完整周年份日期和时间,用 T 分隔:
YYYY-'W'ww-e'T'HH:mm:ss.SSSZ
。这使用 ISO 周日期定义。 week_date_time_no_millis
或strict_week_date_time_no_millis
- 一个格式化程序,用于组合完整周年份日期和时间(不含毫秒),用 T 分隔:
YYYY-'W'ww-e'T'HH:mm:ssZ
。这使用 ISO 周日期定义。 weekyear
或strict_weekyear
- 一个格式化程序,用于表示四位周年份:
YYYY
。这使用 ISO 周日期定义。 weekyear_week
或strict_weekyear_week
- 一个格式化程序,用于表示四位周年份和两位周序:
YYYY-'W'ww
。这使用 ISO 周日期定义。 weekyear_week_day
或strict_weekyear_week_day
- 一个格式化程序,用于表示四位周年份、两位周序和一位周内日期:
YYYY-'W'ww-e
。这使用 ISO 周日期定义。 year
或strict_year
- 一个格式化程序,用于表示四位年份:
yyyy
。 year_month
或strict_year_month
- 一个格式化程序,用于表示四位年份和两位月份:
yyyy-MM
。 year_month_day
或strict_year_month_day
-
一个格式化程序,用于表示四位年份、两位月份和两位日期:
yyyy-MM-dd
。