4
4
5
5
import java .text .SimpleDateFormat ;
6
6
import java .time .Instant ;
7
+ import java .time .format .DateTimeParseException ;
7
8
import java .time .temporal .ChronoUnit ;
8
9
import java .util .Date ;
9
10
import java .util .TimeZone ;
@@ -20,25 +21,38 @@ public class GitHubStaticTest extends AbstractGitHubWireMockTest {
20
21
21
22
@ Test
22
23
public void timeRoundTrip () throws Exception {
23
- Instant instantNow = Instant .now ();
24
+ final long stableInstantEpochMilli = 1533721222255L ;
25
+ Instant instantNow = Instant .ofEpochMilli (stableInstantEpochMilli );
24
26
25
27
Date instantSeconds = Date .from (instantNow .truncatedTo (ChronoUnit .SECONDS ));
26
28
Date instantMillis = Date .from (instantNow .truncatedTo (ChronoUnit .MILLIS ));
27
29
28
- // if we happen to land exactly on zero milliseconds, add 1 milli
29
- if (instantSeconds .equals (instantMillis )) {
30
- instantMillis = Date .from (instantNow .plusMillis (1 ).truncatedTo (ChronoUnit .MILLIS ));
31
- }
30
+ String instantFormatSlash = formatZonedDate (instantMillis , "yyyy/MM/dd HH:mm:ss ZZZZ" , "PST" );
31
+ assertThat (instantFormatSlash , equalTo ("2018/08/08 02:40:22 -0700" ));
32
32
33
- // TODO: other formats
34
- String instantFormatSlash = formatDate (instantMillis , "yyyy/MM/dd HH:mm:ss ZZZZ" );
35
33
String instantFormatDash = formatDate (instantMillis , "yyyy-MM-dd'T'HH:mm:ss'Z'" );
34
+ assertThat (instantFormatDash , equalTo ("2018-08-08T09:40:22Z" ));
35
+
36
36
String instantFormatMillis = formatDate (instantMillis , "yyyy-MM-dd'T'HH:mm:ss.S'Z'" );
37
+ assertThat (instantFormatMillis , equalTo ("2018-08-08T09:40:22.255Z" ));
38
+
39
+ String instantFormatMillisZoned = formatZonedDate (instantMillis , "yyyy-MM-dd'T'HH:mm:ss.SXXX" , "PST" );
40
+ assertThat (instantFormatMillisZoned , equalTo ("2018-08-08T02:40:22.255-07:00" ));
41
+
37
42
String instantSecondsFormatMillis = formatDate (instantSeconds , "yyyy-MM-dd'T'HH:mm:ss.S'Z'" );
43
+ assertThat (instantSecondsFormatMillis , equalTo ("2018-08-08T09:40:22.0Z" ));
44
+
45
+ String instantSecondsFormatMillisZoned = formatZonedDate (instantSeconds , "yyyy-MM-dd'T'HH:mm:ss.SSSXXX" , "PST" );
46
+ assertThat (instantSecondsFormatMillisZoned , equalTo ("2018-08-08T02:40:22.000-07:00" ));
47
+
38
48
String instantBadFormat = formatDate (instantMillis , "yy-MM-dd'T'HH:mm'Z'" );
49
+ assertThat (instantBadFormat , equalTo ("18-08-08T09:40Z" ));
39
50
40
51
assertThat (GitHubClient .parseDate (GitHubClient .printDate (instantSeconds )),
41
52
equalTo (GitHubClient .parseDate (GitHubClient .printDate (instantMillis ))));
53
+ assertThat (GitHubClient .printDate (instantSeconds ), equalTo ("2018-08-08T09:40:22Z" ));
54
+ assertThat (GitHubClient .printDate (GitHubClient .parseDate (instantFormatMillisZoned )),
55
+ equalTo ("2018-08-08T09:40:22Z" ));
42
56
43
57
assertThat (instantSeconds , equalTo (GitHubClient .parseDate (GitHubClient .printDate (instantSeconds ))));
44
58
@@ -51,14 +65,16 @@ public void timeRoundTrip() throws Exception {
51
65
52
66
// This parser does not truncate to the nearest second, so it will be equal
53
67
assertThat (instantMillis , equalTo (GitHubClient .parseDate (instantFormatMillis )));
68
+ assertThat (instantMillis , equalTo (GitHubClient .parseDate (instantFormatMillisZoned )));
54
69
55
70
assertThat (instantSeconds , equalTo (GitHubClient .parseDate (instantSecondsFormatMillis )));
71
+ assertThat (instantSeconds , equalTo (GitHubClient .parseDate (instantSecondsFormatMillisZoned )));
56
72
57
73
try {
58
74
GitHubClient .parseDate (instantBadFormat );
59
75
fail ("Bad time format should throw." );
60
- } catch (IllegalStateException e ) {
61
- assertThat (e .getMessage (), equalTo ("Unable to parse the timestamp: " + instantBadFormat ));
76
+ } catch (DateTimeParseException e ) {
77
+ assertThat (e .getMessage (), equalTo ("Text '" + instantBadFormat + "' could not be parsed at index 0" ));
62
78
}
63
79
}
64
80
@@ -226,8 +242,12 @@ public void testMappingReaderWriter() throws Exception {
226
242
}
227
243
228
244
static String formatDate (Date dt , String format ) {
245
+ return formatZonedDate (dt , format , "GMT" );
246
+ }
247
+
248
+ static String formatZonedDate (Date dt , String format , String timeZone ) {
229
249
SimpleDateFormat df = new SimpleDateFormat (format );
230
- df .setTimeZone (TimeZone .getTimeZone ("GMT" ));
250
+ df .setTimeZone (TimeZone .getTimeZone (timeZone ));
231
251
return df .format (dt );
232
252
}
233
253
0 commit comments