format.asciidoc 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. [[mapping-date-format]]
  2. === `format`
  3. In JSON documents, dates are represented as strings. Elasticsearch uses a set
  4. of preconfigured formats to recognize and parse these strings into a long
  5. value representing _milliseconds-since-the-epoch_ in UTC.
  6. Besides the <<built-in-date-formats,built-in formats>>, your own
  7. <<custom-date-formats,custom formats>> can be specified using the familiar
  8. `yyyy/MM/dd` syntax:
  9. [source,console]
  10. --------------------------------------------------
  11. PUT my-index-000001
  12. {
  13. "mappings": {
  14. "properties": {
  15. "date": {
  16. "type": "date",
  17. "format": "yyyy-MM-dd"
  18. }
  19. }
  20. }
  21. }
  22. --------------------------------------------------
  23. Many APIs which support date values also support <<date-math,date math>>
  24. expressions, such as `now-1m/d` -- the current time, minus one month, rounded
  25. down to the nearest day.
  26. [[custom-date-formats]]
  27. ==== Custom date formats
  28. Completely customizable date formats are supported. The syntax for these is explained
  29. https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html[DateTimeFormatter docs].
  30. [[built-in-date-formats]]
  31. ==== Built In Formats
  32. Most of the below formats have a `strict` companion format, which means that
  33. year, month and day parts of the month must use respectively 4, 2 and 2 digits
  34. exactly, potentially prepending zeros. For instance a date like `5/11/1` would
  35. be considered invalid and would need to be rewritten to `2005/11/01` to be
  36. accepted by the date parser.
  37. To use them, you need to prepend `strict_` to the name of the date format, for
  38. instance `strict_date_optional_time` instead of `date_optional_time`.
  39. These strict date formats are especially useful when
  40. <<date-detection,date fields are dynamically mapped>> in order to make sure to
  41. not accidentally map irrelevant strings as dates.
  42. The following tables lists all the defaults ISO formats supported:
  43. `epoch_millis`::
  44. A formatter for the number of milliseconds since the epoch. Note, that
  45. this timestamp is subject to the limits of a Java `Long.MIN_VALUE` and
  46. `Long.MAX_VALUE`.
  47. `epoch_second`::
  48. A formatter for the number of seconds since the epoch. Note, that this
  49. timestamp is subject to the limits of a Java `Long.MIN_VALUE` and `Long.
  50. MAX_VALUE` divided by 1000 (the number of milliseconds in a second).
  51. [[strict-date-time]]`date_optional_time` or `strict_date_optional_time`::
  52. A generic ISO datetime parser, where the date must include the year at a minimum, and the time
  53. (separated by `T`), is optional.
  54. Examples: `yyyy-MM-dd'T'HH:mm:ss.SSSZ` or `yyyy-MM-dd`.
  55. NOTE: When using `date_optional_time`, the parsing is lenient and will attempt to parse
  56. numbers as a year (e.g. `292278994` will be parsed as a year). This can lead to unexpected results
  57. when paired with a numeric focused format like `epoch_second` and `epoch_millis`.
  58. It is recommended you use `strict_date_optional_time` when pairing with a numeric focused format.
  59. [[strict-date-time-nanos]]`strict_date_optional_time_nanos`::
  60. A generic ISO datetime parser, where the date must include the year at a minimum, and the time
  61. (separated by `T`), is optional. The fraction of a second
  62. part has a nanosecond resolution.
  63. Examples: `yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ` or `yyyy-MM-dd`.
  64. `basic_date`::
  65. A basic formatter for a full date as four digit year, two digit month of
  66. year, and two digit day of month: `yyyyMMdd`.
  67. `basic_date_time`::
  68. A basic formatter that combines a basic date and time, separated by a 'T':
  69. `yyyyMMdd'T'HHmmss.SSSZ`.
  70. `basic_date_time_no_millis`::
  71. A basic formatter that combines a basic date and time without millis,
  72. separated by a 'T': `yyyyMMdd'T'HHmmssZ`.
  73. `basic_ordinal_date`::
  74. A formatter for a full ordinal date, using a four digit year and three
  75. digit dayOfYear: `yyyyDDD`.
  76. `basic_ordinal_date_time`::
  77. A formatter for a full ordinal date and time, using a four digit year and
  78. three digit dayOfYear: `yyyyDDD'T'HHmmss.SSSZ`.
  79. `basic_ordinal_date_time_no_millis`::
  80. A formatter for a full ordinal date and time without millis, using a four
  81. digit year and three digit dayOfYear: `yyyyDDD'T'HHmmssZ`.
  82. `basic_time`::
  83. A basic formatter for a two digit hour of day, two digit minute of hour,
  84. two digit second of minute, three digit millis, and time zone offset:
  85. `HHmmss.SSSZ`.
  86. `basic_time_no_millis`::
  87. A basic formatter for a two digit hour of day, two digit minute of hour,
  88. two digit second of minute, and time zone offset: `HHmmssZ`.
  89. `basic_t_time`::
  90. A basic formatter for a two digit hour of day, two digit minute of hour,
  91. two digit second of minute, three digit millis, and time zone off set
  92. prefixed by 'T': `'T'HHmmss.SSSZ`.
  93. `basic_t_time_no_millis`::
  94. A basic formatter for a two digit hour of day, two digit minute of hour,
  95. two digit second of minute, and time zone offset prefixed by 'T':
  96. `'T'HHmmssZ`.
  97. `basic_week_date` or `strict_basic_week_date`::
  98. A basic formatter for a full date as four digit weekyear, two digit week
  99. of weekyear, and one digit day of week: `xxxx'W'wwe`.
  100. `basic_week_date_time` or `strict_basic_week_date_time`::
  101. A basic formatter that combines a basic weekyear date and time, separated
  102. by a 'T': `xxxx'W'wwe'T'HHmmss.SSSZ`.
  103. `basic_week_date_time_no_millis` or `strict_basic_week_date_time_no_millis`::
  104. A basic formatter that combines a basic weekyear date and time without
  105. millis, separated by a 'T': `xxxx'W'wwe'T'HHmmssZ`.
  106. `date` or `strict_date`::
  107. A formatter for a full date as four digit year, two digit month of year,
  108. and two digit day of month: `yyyy-MM-dd`.
  109. `date_hour` or `strict_date_hour`::
  110. A formatter that combines a full date and two digit hour of day:
  111. `yyyy-MM-dd'T'HH`.
  112. `date_hour_minute` or `strict_date_hour_minute`::
  113. A formatter that combines a full date, two digit hour of day, and two
  114. digit minute of hour: `yyyy-MM-dd'T'HH:mm`.
  115. `date_hour_minute_second` or `strict_date_hour_minute_second`::
  116. A formatter that combines a full date, two digit hour of day, two digit
  117. minute of hour, and two digit second of minute: `yyyy-MM-dd'T'HH:mm:ss`.
  118. `date_hour_minute_second_fraction` or `strict_date_hour_minute_second_fraction`::
  119. A formatter that combines a full date, two digit hour of day, two digit
  120. minute of hour, two digit second of minute, and three digit fraction of
  121. second: `yyyy-MM-dd'T'HH:mm:ss.SSS`.
  122. `date_hour_minute_second_millis` or `strict_date_hour_minute_second_millis`::
  123. A formatter that combines a full date, two digit hour of day, two digit
  124. minute of hour, two digit second of minute, and three digit fraction of
  125. second: `yyyy-MM-dd'T'HH:mm:ss.SSS`.
  126. `date_time` or `strict_date_time`::
  127. A formatter that combines a full date and time, separated by a 'T':
  128. `yyyy-MM-dd'T'HH:mm:ss.SSSZ`.
  129. `date_time_no_millis` or `strict_date_time_no_millis`::
  130. A formatter that combines a full date and time without millis, separated
  131. by a 'T': `yyyy-MM-dd'T'HH:mm:ssZ`.
  132. `hour` or `strict_hour`::
  133. A formatter for a two digit hour of day: `HH`
  134. `hour_minute` or `strict_hour_minute`::
  135. A formatter for a two digit hour of day and two digit minute of hour:
  136. `HH:mm`.
  137. `hour_minute_second` or `strict_hour_minute_second`::
  138. A formatter for a two digit hour of day, two digit minute of hour, and two
  139. digit second of minute: `HH:mm:ss`.
  140. `hour_minute_second_fraction` or `strict_hour_minute_second_fraction`::
  141. A formatter for a two digit hour of day, two digit minute of hour, two
  142. digit second of minute, and three digit fraction of second: `HH:mm:ss.SSS`.
  143. `hour_minute_second_millis` or `strict_hour_minute_second_millis`::
  144. A formatter for a two digit hour of day, two digit minute of hour, two
  145. digit second of minute, and three digit fraction of second: `HH:mm:ss.SSS`.
  146. `ordinal_date` or `strict_ordinal_date`::
  147. A formatter for a full ordinal date, using a four digit year and three
  148. digit dayOfYear: `yyyy-DDD`.
  149. `ordinal_date_time` or `strict_ordinal_date_time`::
  150. A formatter for a full ordinal date and time, using a four digit year and
  151. three digit dayOfYear: `yyyy-DDD'T'HH:mm:ss.SSSZ`.
  152. `ordinal_date_time_no_millis` or `strict_ordinal_date_time_no_millis`::
  153. A formatter for a full ordinal date and time without millis, using a four
  154. digit year and three digit dayOfYear: `yyyy-DDD'T'HH:mm:ssZ`.
  155. `time` or `strict_time`::
  156. A formatter for a two digit hour of day, two digit minute of hour, two
  157. digit second of minute, three digit fraction of second, and time zone
  158. offset: `HH:mm:ss.SSSZ`.
  159. `time_no_millis` or `strict_time_no_millis`::
  160. A formatter for a two digit hour of day, two digit minute of hour, two
  161. digit second of minute, and time zone offset: `HH:mm:ssZ`.
  162. `t_time` or `strict_t_time`::
  163. A formatter for a two digit hour of day, two digit minute of hour, two
  164. digit second of minute, three digit fraction of second, and time zone
  165. offset prefixed by 'T': `'T'HH:mm:ss.SSSZ`.
  166. `t_time_no_millis` or `strict_t_time_no_millis`::
  167. A formatter for a two digit hour of day, two digit minute of hour, two
  168. digit second of minute, and time zone offset prefixed by 'T': `'T'HH:mm:ssZ`.
  169. `week_date` or `strict_week_date`::
  170. A formatter for a full date as four digit weekyear, two digit week of
  171. weekyear, and one digit day of week: `xxxx-'W'ww-e`.
  172. `week_date_time` or `strict_week_date_time`::
  173. A formatter that combines a full weekyear date and time, separated by a
  174. 'T': `xxxx-'W'ww-e'T'HH:mm:ss.SSSZ`.
  175. `week_date_time_no_millis` or `strict_week_date_time_no_millis`::
  176. A formatter that combines a full weekyear date and time without millis,
  177. separated by a 'T': `xxxx-'W'ww-e'T'HH:mm:ssZ`.
  178. `weekyear` or `strict_weekyear`::
  179. A formatter for a four digit weekyear: `xxxx`.
  180. `weekyear_week` or `strict_weekyear_week`::
  181. A formatter for a four digit weekyear and two digit week of weekyear:
  182. `xxxx-'W'ww`.
  183. `weekyear_week_day` or `strict_weekyear_week_day`::
  184. A formatter for a four digit weekyear, two digit week of weekyear, and one
  185. digit day of week: `xxxx-'W'ww-e`.
  186. `year` or `strict_year`::
  187. A formatter for a four digit year: `yyyy`.
  188. `year_month` or `strict_year_month`::
  189. A formatter for a four digit year and two digit month of year: `yyyy-MM`.
  190. `year_month_day` or `strict_year_month_day`::
  191. A formatter for a four digit year, two digit month of year, and two digit
  192. day of month: `yyyy-MM-dd`.