123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332 |
- [[mapping-date-format]]
- === `format`
- In JSON documents, dates are represented as strings. Elasticsearch uses a set
- of preconfigured formats to recognize and parse these strings into a long
- value representing _milliseconds-since-the-epoch_ in UTC.
- Besides the <<built-in-date-formats,built-in formats>>, your own
- <<custom-date-formats,custom formats>> can be specified using the familiar
- `yyyy/MM/dd` syntax:
- [source,console]
- --------------------------------------------------
- PUT my-index-000001
- {
- "mappings": {
- "properties": {
- "date": {
- "type": "date",
- "format": "yyyy-MM-dd"
- }
- }
- }
- }
- --------------------------------------------------
- Many APIs which support date values also support <<date-math,date math>>
- expressions, such as `now-1m/d` -- the current time, minus one month, rounded
- down to the nearest day.
- [[custom-date-formats]]
- ==== Custom date formats
- Completely customizable date formats are supported. The syntax for these is explained in
- https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/format/DateTimeFormatter.html[DateTimeFormatter docs].
- [[custom-date-format-locales]]
- ===== Differences in locale information between JDK versions
- There can be some differences in date formats between JDK versions and different locales. In particular,
- there can be differences in text strings used for textual date formats, and there can be differences
- in the results of week-date calculations.
- There can be differences in text strings used by the following field specifiers:
- * `B`, `E`, `G`, `O`, `a`, `v`, `z` of any length
- * `L`, `M`, `Q`, `q`, `c`, `e` of length 3 or greater
- * `Z` of length 4
- If the text format changes between Elasticsearch or JDK versions, it can cause significant problems
- with ingest, output, and re-indexing. It is recommended to always use numerical fields in custom date formats,
- which are not affected by locale information.
- There can also be differences in week-date calculations using the `Y`, `W`, and `w` field specifiers.
- The underlying data used to calculate week-dates can vary depending on the JDK version and locale;
- this can cause differences in the calculated week-date for the same calendar dates.
- It is recommended that the built-in week-date formats are used, which will always use ISO rules
- for calculating week-dates.
- In particular, there is a significant change in locale information between JDK releases 22 and 23.
- Elasticsearch will use the _COMPAT_ locale database when run on JDK 22 and before,
- and will use the _CLDR_ locale database when run on JDK 23 and above. This change can cause significant differences
- to the textual date formats accepted by Elasticsearch, and to calculated week-dates. If you are using
- affected specifiers, you may need to modify your ingest or output integration code to account
- for the differences between these two JDK versions.
- [[built-in-date-formats]]
- ==== Built In Formats
- Most of the below formats have a `strict` companion format, which means that
- year, month and day parts of the month must use respectively 4, 2 and 2 digits
- exactly, potentially prepending zeros. For instance a date like `5/11/1` would
- be considered invalid and would need to be rewritten to `2005/11/01` to be
- accepted by the date parser.
- To use them, you need to prepend `strict_` to the name of the date format, for
- instance `strict_date_optional_time` instead of `date_optional_time`.
- These strict date formats are especially useful when
- <<date-detection,date fields are dynamically mapped>> in order to make sure to
- not accidentally map irrelevant strings as dates.
- The following tables lists all the defaults ISO formats supported:
- `epoch_millis`::
- A formatter for the number of milliseconds since the epoch. Note, that
- this timestamp is subject to the limits of a Java `Long.MIN_VALUE` and
- `Long.MAX_VALUE`.
- `epoch_second`::
- A formatter for the number of seconds since the epoch. Note, that this
- timestamp is subject to the limits of a Java `Long.MIN_VALUE` and `Long.
- MAX_VALUE` divided by 1000 (the number of milliseconds in a second).
- [[strict-date-time]]`date_optional_time` or `strict_date_optional_time`::
- A generic ISO datetime parser, where the date must include the year at a minimum, and the time
- (separated by `T`), is optional.
- Examples: `yyyy-MM-dd'T'HH:mm:ss.SSSZ` or `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-time-nanos]]`strict_date_optional_time_nanos`::
- A generic ISO datetime parser, where the date must include the year at a minimum, and the time
- (separated by `T`), is optional. The fraction of a second
- part has a nanosecond resolution.
- Examples: `yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ` or `yyyy-MM-dd`.
- `basic_date`::
- A basic formatter for a full date as four digit year, two digit month of
- year, and two digit day of month: `yyyyMMdd`.
- `basic_date_time`::
- A basic formatter that combines a basic date and time, separated by a 'T':
- `yyyyMMdd'T'HHmmss.SSSZ`.
- `basic_date_time_no_millis`::
- A basic formatter that combines a basic date and time without millis,
- separated by a 'T': `yyyyMMdd'T'HHmmssZ`.
- `basic_ordinal_date`::
- A formatter for a full ordinal date, using a four digit year and three
- digit dayOfYear: `yyyyDDD`.
- `basic_ordinal_date_time`::
- A formatter for a full ordinal date and time, using a four digit year and
- three digit dayOfYear: `yyyyDDD'T'HHmmss.SSSZ`.
- `basic_ordinal_date_time_no_millis`::
- A formatter for a full ordinal date and time without millis, using a four
- digit year and three digit dayOfYear: `yyyyDDD'T'HHmmssZ`.
- `basic_time`::
- A basic formatter for a two digit hour of day, two digit minute of hour,
- two digit second of minute, three digit millis, and time zone offset:
- `HHmmss.SSSZ`.
- `basic_time_no_millis`::
- A basic formatter for a two digit hour of day, two digit minute of hour,
- two digit second of minute, and time zone offset: `HHmmssZ`.
- `basic_t_time`::
- A basic formatter for a two digit hour of day, two digit minute of hour,
- two digit second of minute, three digit millis, and time zone off set
- prefixed by 'T': `'T'HHmmss.SSSZ`.
- `basic_t_time_no_millis`::
- A basic formatter for a two digit hour of day, two digit minute of hour,
- two digit second of minute, and time zone offset prefixed by 'T':
- `'T'HHmmssZ`.
- `basic_week_date` or `strict_basic_week_date`::
- A basic formatter for a full date as four digit weekyear, two digit week
- of weekyear, and one digit day of week: `xxxx'W'wwe`.
- `basic_week_date_time` or `strict_basic_week_date_time`::
- A basic formatter that combines a basic weekyear date and time, separated
- by a 'T': `xxxx'W'wwe'T'HHmmss.SSSZ`.
- `basic_week_date_time_no_millis` or `strict_basic_week_date_time_no_millis`::
- A basic formatter that combines a basic weekyear date and time without
- millis, separated by a 'T': `xxxx'W'wwe'T'HHmmssZ`.
- `date` or `strict_date`::
- A formatter for a full date as four digit year, two digit month of year,
- and two digit day of month: `yyyy-MM-dd`.
- `date_hour` or `strict_date_hour`::
- A formatter that combines a full date and two digit hour of day:
- `yyyy-MM-dd'T'HH`.
- `date_hour_minute` or `strict_date_hour_minute`::
- A formatter that combines a full date, two digit hour of day, and two
- digit minute of hour: `yyyy-MM-dd'T'HH:mm`.
- `date_hour_minute_second` or `strict_date_hour_minute_second`::
- A formatter that combines a full date, two digit hour of day, two digit
- minute of hour, and two digit second of minute: `yyyy-MM-dd'T'HH:mm:ss`.
- `date_hour_minute_second_fraction` or `strict_date_hour_minute_second_fraction`::
- A formatter that combines a full date, two digit hour of day, two digit
- minute of hour, two digit second of minute, and three digit fraction of
- second: `yyyy-MM-dd'T'HH:mm:ss.SSS`.
- `date_hour_minute_second_millis` or `strict_date_hour_minute_second_millis`::
- A formatter that combines a full date, two digit hour of day, two digit
- minute of hour, two digit second of minute, and three digit fraction of
- second: `yyyy-MM-dd'T'HH:mm:ss.SSS`.
- `date_time` or `strict_date_time`::
- A formatter that combines a full date and time, separated by a 'T':
- `yyyy-MM-dd'T'HH:mm:ss.SSSZ`.
- `date_time_no_millis` or `strict_date_time_no_millis`::
- A formatter that combines a full date and time without millis, separated
- by a 'T': `yyyy-MM-dd'T'HH:mm:ssZ`.
- `hour` or `strict_hour`::
- A formatter for a two digit hour of day: `HH`
- `hour_minute` or `strict_hour_minute`::
- A formatter for a two digit hour of day and two digit minute of hour:
- `HH:mm`.
- `hour_minute_second` or `strict_hour_minute_second`::
- A formatter for a two digit hour of day, two digit minute of hour, and two
- digit second of minute: `HH:mm:ss`.
- `hour_minute_second_fraction` or `strict_hour_minute_second_fraction`::
- A formatter for a two digit hour of day, two digit minute of hour, two
- digit second of minute, and three digit fraction of second: `HH:mm:ss.SSS`.
- `hour_minute_second_millis` or `strict_hour_minute_second_millis`::
- A formatter for a two digit hour of day, two digit minute of hour, two
- digit second of minute, and three digit fraction of second: `HH:mm:ss.SSS`.
- `ordinal_date` or `strict_ordinal_date`::
- A formatter for a full ordinal date, using a four digit year and three
- digit dayOfYear: `yyyy-DDD`.
- `ordinal_date_time` or `strict_ordinal_date_time`::
- A formatter for a full ordinal date and time, using a four digit year and
- three digit dayOfYear: `yyyy-DDD'T'HH:mm:ss.SSSZ`.
- `ordinal_date_time_no_millis` or `strict_ordinal_date_time_no_millis`::
- A formatter for a full ordinal date and time without millis, using a four
- digit year and three digit dayOfYear: `yyyy-DDD'T'HH:mm:ssZ`.
- `time` or `strict_time`::
- A formatter for a two digit hour of day, two digit minute of hour, two
- digit second of minute, three digit fraction of second, and time zone
- offset: `HH:mm:ss.SSSZ`.
- `time_no_millis` or `strict_time_no_millis`::
- A formatter for a two digit hour of day, two digit minute of hour, two
- digit second of minute, and time zone offset: `HH:mm:ssZ`.
- `t_time` or `strict_t_time`::
- A formatter for a two digit hour of day, two digit minute of hour, two
- digit second of minute, three digit fraction of second, and time zone
- offset prefixed by 'T': `'T'HH:mm:ss.SSSZ`.
- `t_time_no_millis` or `strict_t_time_no_millis`::
- A formatter for a two digit hour of day, two digit minute of hour, two
- digit second of minute, and time zone offset prefixed by 'T': `'T'HH:mm:ssZ`.
- `week_date` or `strict_week_date`::
- A formatter for a full date as four digit weekyear, two digit week of
- weekyear, and one digit day of week: `YYYY-'W'ww-e`.
- This uses the ISO week-date definition.
- `week_date_time` or `strict_week_date_time`::
- A formatter that combines a full weekyear date and time, separated by a
- 'T': `YYYY-'W'ww-e'T'HH:mm:ss.SSSZ`.
- This uses the ISO week-date definition.
- `week_date_time_no_millis` or `strict_week_date_time_no_millis`::
- A formatter that combines a full weekyear date and time without millis,
- separated by a 'T': `YYYY-'W'ww-e'T'HH:mm:ssZ`.
- This uses the ISO week-date definition.
- `weekyear` or `strict_weekyear`::
- A formatter for a four digit weekyear: `YYYY`.
- This uses the ISO week-date definition.
- `weekyear_week` or `strict_weekyear_week`::
- A formatter for a four digit weekyear and two digit week of weekyear:
- `YYYY-'W'ww`.
- This uses the ISO week-date definition.
- `weekyear_week_day` or `strict_weekyear_week_day`::
- A formatter for a four digit weekyear, two digit week of weekyear, and one
- digit day of week: `YYYY-'W'ww-e`.
- This uses the ISO week-date definition.
- `year` or `strict_year`::
- A formatter for a four digit year: `yyyy`.
- `year_month` or `strict_year_month`::
- A formatter for a four digit year and two digit month of year: `yyyy-MM`.
- `year_month_day` or `strict_year_month_day`::
- A formatter for a four digit year, two digit month of year, and two digit
- day of month: `yyyy-MM-dd`.
|