Skip to content

Commit 456c1ad

Browse files
christophstroblmp911de
authored andcommitted
Add shortcut for date aggregation operators working with timezone.
See: #3713 Original pull request: #3748.
1 parent fc41793 commit 456c1ad

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/DateOperators.java

+26
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,19 @@ public static DateOperatorFactory dateOf(String fieldReference) {
4646
return new DateOperatorFactory(fieldReference);
4747
}
4848

49+
/**
50+
* Take the date referenced by given {@literal fieldReference}.
51+
*
52+
* @param fieldReference must not be {@literal null}.
53+
* @return new instance of {@link DateOperatorFactory}.
54+
* @since 3.3
55+
*/
56+
public static DateOperatorFactory zonedDateOf(String fieldReference, Timezone timezone) {
57+
58+
Assert.notNull(fieldReference, "FieldReference must not be null!");
59+
return new DateOperatorFactory(fieldReference).withTimezone(timezone);
60+
}
61+
4962
/**
5063
* Take the date resulting from the given {@link AggregationExpression}.
5164
*
@@ -58,6 +71,19 @@ public static DateOperatorFactory dateOf(AggregationExpression expression) {
5871
return new DateOperatorFactory(expression);
5972
}
6073

74+
/**
75+
* Take the date resulting from the given {@link AggregationExpression}.
76+
*
77+
* @param expression must not be {@literal null}.
78+
* @return new instance of {@link DateOperatorFactory}.
79+
* @since 3.3
80+
*/
81+
public static DateOperatorFactory zonedDateOf(AggregationExpression expression, Timezone timezone) {
82+
83+
Assert.notNull(expression, "Expression must not be null!");
84+
return new DateOperatorFactory(expression).withTimezone(timezone);
85+
}
86+
6187
/**
6288
* Take the given value as date.
6389
* <p/>

spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/DateOperatorsUnitTests.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ void rendersDateAdd() {
3535

3636
@Test // GH-3713
3737
void rendersDateAddWithTimezone() {
38-
39-
assertThat(DateOperators.dateOf("purchaseDate").withTimezone(Timezone.valueOf("America/Chicago")).add(3, "day")
38+
39+
assertThat(DateOperators.zonedDateOf("purchaseDate", Timezone.valueOf("America/Chicago")).add(3, "day")
4040
.toDocument(Aggregation.DEFAULT_CONTEXT)).isEqualTo(Document.parse(
4141
"{ $dateAdd: { startDate: \"$purchaseDate\", unit: \"day\", amount: 3, timezone : \"America/Chicago\" } }"));
4242
}
@@ -53,7 +53,7 @@ void rendersDateDiff() {
5353
@Test // GH-3713
5454
void rendersDateDiffWithTimezone() {
5555

56-
assertThat(DateOperators.dateOf("purchaseDate").withTimezone(Timezone.valueOf("America/Chicago"))
56+
assertThat(DateOperators.zonedDateOf("purchaseDate", Timezone.valueOf("America/Chicago"))
5757
.diffValueOf("delivered", "day").toDocument(Aggregation.DEFAULT_CONTEXT)).isEqualTo(Document.parse(
5858
"{ $dateDiff: { startDate: \"$purchaseDate\", endDate: \"$delivered\", unit: \"day\", timezone : \"America/Chicago\" } }"));
5959
}

0 commit comments

Comments
 (0)