@@ -61,7 +61,8 @@ public enum DateTimeUnit {
61
61
62
62
@ Override
63
63
long roundFloor (long utcMillis , int multiplier ) {
64
- return DateUtils .roundWeekIntervalOfWeekYear (utcMillis , multiplier );
64
+ assert multiplier == 1 ;
65
+ return DateUtils .roundWeekOfWeekYear (utcMillis );
65
66
}
66
67
67
68
@ Override
@@ -74,7 +75,8 @@ long extraLocalOffsetLookup() {
74
75
75
76
@ Override
76
77
long roundFloor (long utcMillis , int multiplier ) {
77
- return multiplier == 1 ? DateUtils .roundYear (utcMillis ) : DateUtils .roundYearInterval (utcMillis , multiplier );
78
+ assert multiplier == 1 ;
79
+ return DateUtils .roundYear (utcMillis );
78
80
}
79
81
80
82
@ Override
@@ -87,9 +89,8 @@ long extraLocalOffsetLookup() {
87
89
88
90
@ Override
89
91
long roundFloor (long utcMillis , int multiplier ) {
90
- return multiplier == 1
91
- ? DateUtils .roundQuarterOfYear (utcMillis )
92
- : DateUtils .roundIntervalMonthOfYear (utcMillis , multiplier * 3 );
92
+ assert multiplier == 1 ;
93
+ return DateUtils .roundQuarterOfYear (utcMillis );
93
94
}
94
95
95
96
@ Override
@@ -102,7 +103,8 @@ long extraLocalOffsetLookup() {
102
103
103
104
@ Override
104
105
long roundFloor (long utcMillis , int multiplier ) {
105
- return multiplier == 1 ? DateUtils .roundMonthOfYear (utcMillis ) : DateUtils .roundIntervalMonthOfYear (utcMillis , multiplier );
106
+ assert multiplier == 1 ;
107
+ return DateUtils .roundMonthOfYear (utcMillis );
106
108
}
107
109
108
110
@ Override
@@ -113,7 +115,8 @@ long extraLocalOffsetLookup() {
113
115
DAY_OF_MONTH ((byte ) 5 , "day" , ChronoField .DAY_OF_MONTH , true , ChronoField .DAY_OF_MONTH .getBaseUnit ().getDuration ().toMillis ()) {
114
116
@ Override
115
117
long roundFloor (long utcMillis , int multiplier ) {
116
- return DateUtils .roundFloor (utcMillis , this .ratio * multiplier );
118
+ assert multiplier == 1 ;
119
+ return DateUtils .roundFloor (utcMillis , this .ratio );
117
120
}
118
121
119
122
@ Override
@@ -124,15 +127,16 @@ long extraLocalOffsetLookup() {
124
127
HOUR_OF_DAY ((byte ) 6 , "hour" , ChronoField .HOUR_OF_DAY , true , ChronoField .HOUR_OF_DAY .getBaseUnit ().getDuration ().toMillis ()) {
125
128
@ Override
126
129
long roundFloor (long utcMillis , int multiplier ) {
127
- return DateUtils .roundFloor (utcMillis , ratio * multiplier );
130
+ assert multiplier == 1 ;
131
+ return DateUtils .roundFloor (utcMillis , ratio );
128
132
}
129
133
130
134
@ Override
131
135
long extraLocalOffsetLookup () {
132
136
return ratio ;
133
137
}
134
138
},
135
- MINUTES_OF_HOUR (
139
+ MINUTE_OF_HOUR (
136
140
(byte ) 7 ,
137
141
"minute" ,
138
142
ChronoField .MINUTE_OF_HOUR ,
@@ -141,7 +145,8 @@ long extraLocalOffsetLookup() {
141
145
) {
142
146
@ Override
143
147
long roundFloor (long utcMillis , int multiplier ) {
144
- return DateUtils .roundFloor (utcMillis , ratio * multiplier );
148
+ assert multiplier == 1 ;
149
+ return DateUtils .roundFloor (utcMillis , ratio );
145
150
}
146
151
147
152
@ Override
@@ -158,13 +163,40 @@ long extraLocalOffsetLookup() {
158
163
) {
159
164
@ Override
160
165
long roundFloor (long utcMillis , int multiplier ) {
161
- return DateUtils .roundFloor (utcMillis , ratio * multiplier );
166
+ assert multiplier == 1 ;
167
+ return DateUtils .roundFloor (utcMillis , ratio );
162
168
}
163
169
164
170
@ Override
165
171
long extraLocalOffsetLookup () {
166
172
return ratio ;
167
173
}
174
+ },
175
+ YEARS_OF_CENTURY ((byte ) 9 , "years" , ChronoField .YEAR_OF_ERA , false , 12 ) {
176
+ private final long extraLocalOffsetLookup = TimeUnit .DAYS .toMillis (366 );
177
+
178
+ @ Override
179
+ long roundFloor (long utcMillis , int multiplier ) {
180
+ return multiplier == 1 ? DateUtils .roundYear (utcMillis ) : DateUtils .roundYearInterval (utcMillis , multiplier );
181
+ }
182
+
183
+ @ Override
184
+ long extraLocalOffsetLookup () {
185
+ return extraLocalOffsetLookup ;
186
+ }
187
+ },
188
+ MONTHS_OF_YEAR ((byte ) 10 , "months" , ChronoField .MONTH_OF_YEAR , false , 1 ) {
189
+ private final long extraLocalOffsetLookup = TimeUnit .DAYS .toMillis (31 );
190
+
191
+ @ Override
192
+ long roundFloor (long utcMillis , int multiplier ) {
193
+ return multiplier == 1 ? DateUtils .roundMonthOfYear (utcMillis ) : DateUtils .roundIntervalMonthOfYear (utcMillis , multiplier );
194
+ }
195
+
196
+ @ Override
197
+ long extraLocalOffsetLookup () {
198
+ return extraLocalOffsetLookup ;
199
+ }
168
200
};
169
201
170
202
private final byte id ;
@@ -222,8 +254,10 @@ public static DateTimeUnit resolve(byte id) {
222
254
case 4 -> MONTH_OF_YEAR ;
223
255
case 5 -> DAY_OF_MONTH ;
224
256
case 6 -> HOUR_OF_DAY ;
225
- case 7 -> MINUTES_OF_HOUR ;
257
+ case 7 -> MINUTE_OF_HOUR ;
226
258
case 8 -> SECOND_OF_MINUTE ;
259
+ case 9 -> YEARS_OF_CENTURY ;
260
+ case 10 -> MONTHS_OF_YEAR ;
227
261
default -> throw new ElasticsearchException ("Unknown date time unit id [" + id + "]" );
228
262
};
229
263
}
@@ -480,7 +514,7 @@ private LocalDateTime truncateLocalDateTime(LocalDateTime localDateTime) {
480
514
case SECOND_OF_MINUTE :
481
515
return localDateTime .withNano (0 );
482
516
483
- case MINUTES_OF_HOUR :
517
+ case MINUTE_OF_HOUR :
484
518
return LocalDateTime .of (
485
519
localDateTime .getYear (),
486
520
localDateTime .getMonthValue (),
@@ -517,6 +551,12 @@ private LocalDateTime truncateLocalDateTime(LocalDateTime localDateTime) {
517
551
case YEAR_OF_CENTURY :
518
552
return LocalDateTime .of (LocalDate .of (localDateTime .getYear (), 1 , 1 ), LocalTime .MIDNIGHT );
519
553
554
+ case YEARS_OF_CENTURY :
555
+ return LocalDateTime .of (LocalDate .of (localDateTime .getYear (), 1 , 1 ), LocalTime .MIDNIGHT );
556
+
557
+ case MONTHS_OF_YEAR :
558
+ return LocalDateTime .of (localDateTime .getYear (), localDateTime .getMonthValue (), 1 , 0 , 0 );
559
+
520
560
default :
521
561
throw new IllegalArgumentException ("NOT YET IMPLEMENTED for unit " + unit );
522
562
}
@@ -879,6 +919,8 @@ private LocalDateTime nextRelevantMidnight(LocalDateTime localMidnight) {
879
919
case MONTH_OF_YEAR -> localMidnight .plus (1 , ChronoUnit .MONTHS );
880
920
case QUARTER_OF_YEAR -> localMidnight .plus (3 , ChronoUnit .MONTHS );
881
921
case YEAR_OF_CENTURY -> localMidnight .plus (1 , ChronoUnit .YEARS );
922
+ case YEARS_OF_CENTURY -> localMidnight .plus (1 , ChronoUnit .YEARS );
923
+ case MONTHS_OF_YEAR -> localMidnight .plus (1 , ChronoUnit .MONTHS );
882
924
default -> throw new IllegalArgumentException ("Unknown round-to-midnight unit: " + unit );
883
925
};
884
926
}
0 commit comments