Skip to content

Commit c58ce38

Browse files
authored
Merge pull request #917 from mrocao/fix/url-timezone-compatibility
Fix timezone compatibility for date parameters
2 parents 06b4d2c + 1fd5010 commit c58ce38

2 files changed

Lines changed: 20 additions & 10 deletions

File tree

src/main/java/com/meilisearch/sdk/http/URLBuilder.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.text.SimpleDateFormat;
44
import java.util.Arrays;
55
import java.util.Date;
6+
import java.util.TimeZone;
67
import lombok.Getter;
78

89
@Getter
@@ -68,11 +69,10 @@ public URLBuilder addParameter(String parameter, int[] value) {
6869
public URLBuilder addParameter(String parameter, Date value) {
6970
if (value != null) {
7071
// Changed to utilise RFC 3339 format
71-
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
7272
addSeparator();
7373
params.append(parameter);
7474
params.append("=");
75-
params.append(formatter.format(value));
75+
params.append(formatDateParameter(value));
7676
}
7777
return this;
7878
}
@@ -117,6 +117,12 @@ private String formatArrayParameters(int[] fields) {
117117
return String.join(",", arr);
118118
}
119119

120+
private String formatDateParameter(Date value) {
121+
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
122+
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
123+
return formatter.format(value);
124+
}
125+
120126
public String getURL() {
121127
return routes.toString() + params.toString();
122128
}

src/test/java/com/meilisearch/sdk/http/URLBuilderTest.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,17 @@
33
import static org.hamcrest.MatcherAssert.assertThat;
44
import static org.hamcrest.Matchers.equalTo;
55
import static org.hamcrest.Matchers.is;
6-
import static org.junit.jupiter.api.Assertions.*;
6+
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
7+
import static org.junit.jupiter.api.Assertions.assertEquals;
78

89
import java.text.SimpleDateFormat;
910
import java.util.Date;
10-
import java.util.TimeZone;
11-
import org.junit.jupiter.api.BeforeEach;
1211
import org.junit.jupiter.api.Test;
1312

1413
public class URLBuilderTest {
1514

1615
private final URLBuilder classToTest = new URLBuilder();
1716

18-
@BeforeEach
19-
void beforeEach() {
20-
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
21-
}
22-
2317
@Test
2418
void addSubroute() {
2519
classToTest.addSubroute("route");
@@ -114,6 +108,16 @@ void addParameterStringDate() throws Exception {
114108
"?parameter1=2042-01-30T15:30:00Z&parameter2=2042-01-30T15:30:00Z");
115109
}
116110

111+
@Test
112+
void addParameterStringDateWithPositiveTimezoneOffset() throws Exception {
113+
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
114+
Date date = format.parse("2042-01-30T17:30:00+02:00");
115+
116+
classToTest.addParameter("parameter1", date);
117+
118+
assertEquals("?parameter1=2042-01-30T15:30:00Z", classToTest.getParams().toString());
119+
}
120+
117121
@Test
118122
void getURL() {
119123
assertThat(classToTest.getURL(), is(equalTo("")));

0 commit comments

Comments
 (0)