Skip to content

Commit c6713fa

Browse files
authored
Use own implementation of date formatters.
Original PR #1650 Closes #1647
1 parent e311df9 commit c6713fa

File tree

6 files changed

+745
-226
lines changed

6 files changed

+745
-226
lines changed

Diff for: src/main/java/org/springframework/data/elasticsearch/annotations/DateFormat.java

+64-49
Original file line numberDiff line numberDiff line change
@@ -16,58 +16,73 @@
1616
package org.springframework.data.elasticsearch.annotations;
1717

1818
/**
19-
* Values based on reference doc - https://www.elastic.co/guide/reference/mapping/date-format/
20-
*
19+
* Values based on reference doc - https://www.elastic.co/guide/reference/mapping/date-format/. The patterns are taken
20+
* from this documentation and slightly adapted so that a Java {@link java.time.format.DateTimeFormatter} produces the
21+
* same values as the Elasticsearch formatter.
22+
*
2123
* @author Jakub Vavrik
2224
* @author Tim te Beek
2325
* @author Peter-Josef Meisch
2426
*/
2527
public enum DateFormat {
26-
none, //
27-
custom, //
28-
basic_date, //
29-
basic_date_time, //
30-
basic_date_time_no_millis, //
31-
basic_ordinal_date, //
32-
basic_ordinal_date_time, //
33-
basic_ordinal_date_time_no_millis, //
34-
basic_time, //
35-
basic_time_no_millis, //
36-
basic_t_time, //
37-
basic_t_time_no_millis, //
38-
basic_week_date, //
39-
basic_week_date_time, //
40-
basic_week_date_time_no_millis, //
41-
date, //
42-
date_hour, //
43-
date_hour_minute, //
44-
date_hour_minute_second, //
45-
date_hour_minute_second_fraction, //
46-
date_hour_minute_second_millis, //
47-
date_optional_time, //
48-
date_time, //
49-
date_time_no_millis, //
50-
epoch_millis, //
51-
epoch_second, //
52-
hour, //
53-
hour_minute, //
54-
hour_minute_second, //
55-
hour_minute_second_fraction, //
56-
hour_minute_second_millis, //
57-
ordinal_date, //
58-
ordinal_date_time, //
59-
ordinal_date_time_no_millis, //
60-
time, //
61-
time_no_millis, //
62-
t_time, //
63-
t_time_no_millis, //
64-
week_date, //
65-
week_date_time, //
66-
week_date_time_no_millis, //
67-
weekyear, //
68-
weekyear_week, //
69-
weekyear_week_day, //
70-
year, //
71-
year_month, //
72-
year_month_day //
28+
none(""), //
29+
custom(""), //
30+
basic_date("uuuuMMdd"), //
31+
basic_date_time("uuuuMMdd'T'HHmmss.SSSXXX"), //
32+
basic_date_time_no_millis("uuuuMMdd'T'HHmmssXXX"), //
33+
basic_ordinal_date("uuuuDDD"), //
34+
basic_ordinal_date_time("yyyyDDD'T'HHmmss.SSSXXX"), //
35+
basic_ordinal_date_time_no_millis("yyyyDDD'T'HHmmssXXX"), //
36+
basic_time("HHmmss.SSSXXX"), //
37+
basic_time_no_millis("HHmmssXXX"), //
38+
basic_t_time("'T'HHmmss.SSSXXX"), //
39+
basic_t_time_no_millis("'T'HHmmssXXX"), //
40+
basic_week_date("YYYY'W'wwe"), // week-based-year!
41+
basic_week_date_time("YYYY'W'wwe'T'HHmmss.SSSX"), // here Elasticsearch uses a different zone format
42+
basic_week_date_time_no_millis("YYYY'W'wwe'T'HHmmssX"), //
43+
date("uuuu-MM-dd"), //
44+
date_hour("uuuu-MM-dd'T'HH"), //
45+
date_hour_minute("uuuu-MM-dd'T'HH:mm"), //
46+
date_hour_minute_second("uuuu-MM-dd'T'HH:mm:ss"), //
47+
date_hour_minute_second_fraction("uuuu-MM-dd'T'HH:mm:ss.SSS"), //
48+
date_hour_minute_second_millis("uuuu-MM-dd'T'HH:mm:ss.SSS"), //
49+
date_optional_time("uuuu-MM-dd['T'HH:mm:ss.SSSXXX]"), //
50+
date_time("uuuu-MM-dd'T'HH:mm:ss.SSSXXX"), //
51+
date_time_no_millis("uuuu-MM-dd'T'HH:mm:ssVV"), // here Elasticsearch uses the zone-id in it's implementation
52+
epoch_millis("epoch_millis"), //
53+
epoch_second("epoch_second"), //
54+
hour("HH"), //
55+
hour_minute("HH:mm"), //
56+
hour_minute_second("HH:mm:ss"), //
57+
hour_minute_second_fraction("HH:mm:ss.SSS"), //
58+
hour_minute_second_millis("HH:mm:ss.SSS"), //
59+
ordinal_date("uuuu-DDD"), //
60+
ordinal_date_time("uuuu-DDD'T'HH:mm:ss.SSSXXX"), //
61+
ordinal_date_time_no_millis("uuuu-DDD'T'HH:mm:ssXXX"), //
62+
time("HH:mm:ss.SSSXXX"), //
63+
time_no_millis("HH:mm:ssXXX"), //
64+
t_time("'T'HH:mm:ss.SSSXXX"), //
65+
t_time_no_millis("'T'HH:mm:ssXXX"), //
66+
week_date("YYYY-'W'ww-e"), //
67+
week_date_time("YYYY-'W'ww-e'T'HH:mm:ss.SSSXXX"), //
68+
week_date_time_no_millis("YYYY-'W'ww-e'T'HH:mm:ssXXX"), //
69+
weekyear(""), // no TemporalAccessor available for these 3
70+
weekyear_week(""), //
71+
weekyear_week_day(""), //
72+
year("uuuu"), //
73+
year_month("uuuu-MM"), //
74+
year_month_day("uuuu-MM-dd"); //
75+
76+
private final String pattern;
77+
78+
DateFormat(String pattern) {
79+
this.pattern = pattern;
80+
}
81+
82+
/**
83+
* @since 4.2
84+
*/
85+
public String getPattern() {
86+
return pattern;
87+
}
7388
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*
2+
* Copyright 2021 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.springframework.data.elasticsearch.core.convert;
17+
18+
import java.time.temporal.TemporalAccessor;
19+
20+
/**
21+
* Interface to convert from and to {@link TemporalAccessor}s.
22+
*
23+
* @author Peter-Josef Meisch
24+
* @since 4.2
25+
*/
26+
public interface DateFormatter {
27+
/**
28+
* Formats a {@link TemporalAccessor} into a String.
29+
*
30+
* @param accessor must not be {@literal null}
31+
* @return the formatted String
32+
*/
33+
String format(TemporalAccessor accessor);
34+
35+
/**
36+
* Parses a String into a {@link TemporalAccessor}.
37+
*
38+
* @param input the String to parse, must not be {@literal null}
39+
* @param type the class of T
40+
* @param <T> the {@link TemporalAccessor} implementation
41+
* @return the parsed instance
42+
*/
43+
<T extends TemporalAccessor> T parse(String input, Class<T> type);
44+
}

0 commit comments

Comments
 (0)