@@ -55,7 +55,13 @@ class TimeZoneTest {
5555
5656 assertFailsWith<IllegalTimeZoneException > { TimeZone .of(" Mars/Standard" ) }
5757 assertFailsWith<IllegalTimeZoneException > { TimeZone .of(" UTC+X" ) }
58+ }
5859
60+ @Test
61+ fun ofFailsOnInvalidOffset () {
62+ for (v in UtcOffsetTest .invalidUtcOffsetStrings) {
63+ assertFailsWith<IllegalTimeZoneException > { TimeZone .of(v) }
64+ }
5965 }
6066
6167 // from 310bp
@@ -97,69 +103,82 @@ class TimeZoneTest {
97103 @Test
98104 fun newYorkOffset () {
99105 val test = TimeZone .of(" America/New_York" )
100- val offset = TimeZone .of(" -5" )
101- assertEquals(TimeZone .of(" -5" ), createInstant(offset, 2008 , 1 , 1 ).offsetIn(test))
102- assertEquals(TimeZone .of(" -5" ), createInstant(offset, 2008 , 2 , 1 ).offsetIn(test))
103- assertEquals(TimeZone .of(" -5" ), createInstant(offset, 2008 , 3 , 1 ).offsetIn(test))
104- assertEquals(TimeZone .of(" -4" ), createInstant(offset, 2008 , 4 , 1 ).offsetIn(test))
105- assertEquals(TimeZone .of(" -4" ), createInstant(offset, 2008 , 5 , 1 ).offsetIn(test))
106- assertEquals(TimeZone .of(" -4" ), createInstant(offset, 2008 , 6 , 1 ).offsetIn(test))
107- assertEquals(TimeZone .of(" -4" ), createInstant(offset, 2008 , 7 , 1 ).offsetIn(test))
108- assertEquals(TimeZone .of(" -4" ), createInstant(offset, 2008 , 8 , 1 ).offsetIn(test))
109- assertEquals(TimeZone .of(" -4" ), createInstant(offset, 2008 , 9 , 1 ).offsetIn(test))
110- assertEquals(TimeZone .of(" -4" ), createInstant(offset, 2008 , 10 , 1 ).offsetIn(test))
111- assertEquals(TimeZone .of(" -4" ), createInstant(offset, 2008 , 11 , 1 ).offsetIn(test))
112- assertEquals(TimeZone .of(" -5" ), createInstant(offset, 2008 , 12 , 1 ).offsetIn(test))
113- assertEquals(TimeZone .of(" -5" ), createInstant(offset, 2008 , 1 , 28 ).offsetIn(test))
114- assertEquals(TimeZone .of(" -5" ), createInstant(offset, 2008 , 2 , 28 ).offsetIn(test))
115- assertEquals(TimeZone .of(" -4" ), createInstant(offset, 2008 , 3 , 28 ).offsetIn(test))
116- assertEquals(TimeZone .of(" -4" ), createInstant(offset, 2008 , 4 , 28 ).offsetIn(test))
117- assertEquals(TimeZone .of(" -4" ), createInstant(offset, 2008 , 5 , 28 ).offsetIn(test))
118- assertEquals(TimeZone .of(" -4" ), createInstant(offset, 2008 , 6 , 28 ).offsetIn(test))
119- assertEquals(TimeZone .of(" -4" ), createInstant(offset, 2008 , 7 , 28 ).offsetIn(test))
120- assertEquals(TimeZone .of(" -4" ), createInstant(offset, 2008 , 8 , 28 ).offsetIn(test))
121- assertEquals(TimeZone .of(" -4" ), createInstant(offset, 2008 , 9 , 28 ).offsetIn(test))
122- assertEquals(TimeZone .of(" -4" ), createInstant(offset, 2008 , 10 , 28 ).offsetIn(test))
123- assertEquals(TimeZone .of(" -5" ), createInstant(offset, 2008 , 11 , 28 ).offsetIn(test))
124- assertEquals(TimeZone .of(" -5" ), createInstant(offset, 2008 , 12 , 28 ).offsetIn(test))
106+ val offset = UtcOffset .parse(" -5" )
107+
108+ fun check (expectedOffset : String , dateTime : LocalDateTime ) {
109+ assertEquals(UtcOffset .parse(expectedOffset), dateTime.toInstant(offset).offsetIn(test))
110+ }
111+
112+ check(" -5" , LocalDateTime (2008 , 1 , 1 ))
113+ check(" -5" , LocalDateTime (2008 , 2 , 1 ))
114+ check(" -5" , LocalDateTime (2008 , 3 , 1 ))
115+ check(" -4" , LocalDateTime (2008 , 4 , 1 ))
116+ check(" -4" , LocalDateTime (2008 , 5 , 1 ))
117+ check(" -4" , LocalDateTime (2008 , 6 , 1 ))
118+ check(" -4" , LocalDateTime (2008 , 7 , 1 ))
119+ check(" -4" , LocalDateTime (2008 , 8 , 1 ))
120+ check(" -4" , LocalDateTime (2008 , 9 , 1 ))
121+ check(" -4" , LocalDateTime (2008 , 10 , 1 ))
122+ check(" -4" , LocalDateTime (2008 , 11 , 1 ))
123+ check(" -5" , LocalDateTime (2008 , 12 , 1 ))
124+ check(" -5" , LocalDateTime (2008 , 1 , 28 ))
125+ check(" -5" , LocalDateTime (2008 , 2 , 28 ))
126+ check(" -4" , LocalDateTime (2008 , 3 , 28 ))
127+ check(" -4" , LocalDateTime (2008 , 4 , 28 ))
128+ check(" -4" , LocalDateTime (2008 , 5 , 28 ))
129+ check(" -4" , LocalDateTime (2008 , 6 , 28 ))
130+ check(" -4" , LocalDateTime (2008 , 7 , 28 ))
131+ check(" -4" , LocalDateTime (2008 , 8 , 28 ))
132+ check(" -4" , LocalDateTime (2008 , 9 , 28 ))
133+ check(" -4" , LocalDateTime (2008 , 10 , 28 ))
134+ check(" -5" , LocalDateTime (2008 , 11 , 28 ))
135+ check(" -5" , LocalDateTime (2008 , 12 , 28 ))
125136 }
126137
127138 // from 310bp
128139 @Test
129140 fun newYorkOffsetToDST () {
130141 val test = TimeZone .of(" America/New_York" )
131- val offset = TimeZone .of(" -5" )
132- assertEquals(TimeZone .of(" -5" ), createInstant(offset, 2008 , 3 , 8 ).offsetIn(test))
133- assertEquals(TimeZone .of(" -5" ), createInstant(offset, 2008 , 3 , 9 ).offsetIn(test))
134- assertEquals(TimeZone .of(" -4" ), createInstant(offset, 2008 , 3 , 10 ).offsetIn(test))
135- assertEquals(TimeZone .of(" -4" ), createInstant(offset, 2008 , 3 , 11 ).offsetIn(test))
136- assertEquals(TimeZone .of(" -4" ), createInstant(offset, 2008 , 3 , 12 ).offsetIn(test))
137- assertEquals(TimeZone .of(" -4" ), createInstant(offset, 2008 , 3 , 13 ).offsetIn(test))
138- assertEquals(TimeZone .of(" -4" ), createInstant(offset, 2008 , 3 , 14 ).offsetIn(test))
142+ val offset = UtcOffset .parse(" -5" )
143+
144+ fun check (expectedOffset : String , dateTime : LocalDateTime ) {
145+ assertEquals(UtcOffset .parse(expectedOffset), dateTime.toInstant(offset).offsetIn(test))
146+ }
147+
148+ check(" -5" , LocalDateTime (2008 , 3 , 8 ))
149+ check(" -5" , LocalDateTime (2008 , 3 , 9 ))
150+ check(" -4" , LocalDateTime (2008 , 3 , 10 ))
151+ check(" -4" , LocalDateTime (2008 , 3 , 11 ))
152+ check(" -4" , LocalDateTime (2008 , 3 , 12 ))
153+ check(" -4" , LocalDateTime (2008 , 3 , 13 ))
154+ check(" -4" , LocalDateTime (2008 , 3 , 14 ))
139155 // cutover at 02:00 local
140- assertEquals( TimeZone .of( " -5" ), createInstant(offset, 2008 , 3 , 9 , 1 , 59 , 59 , 999999999 ).offsetIn(test ))
141- assertEquals( TimeZone .of( " -4" ), createInstant(offset, 2008 , 3 , 9 , 2 , 0 , 0 , 0 ).offsetIn(test ))
156+ check( " -5" , LocalDateTime ( 2008 , 3 , 9 , 1 , 59 , 59 , 999999999 ))
157+ check( " -4" , LocalDateTime ( 2008 , 3 , 9 , 2 , 0 , 0 , 0 ))
142158 }
143159
144160 // from 310bp
145161 @Test
146162 fun newYorkOffsetFromDST () {
147163 val test = TimeZone .of(" America/New_York" )
148- val offset = TimeZone .of(" -4" )
149- assertEquals(TimeZone .of(" -4" ), createInstant(offset, 2008 , 11 , 1 ).offsetIn(test))
150- assertEquals(TimeZone .of(" -4" ), createInstant(offset, 2008 , 11 , 2 ).offsetIn(test))
151- assertEquals(TimeZone .of(" -5" ), createInstant(offset, 2008 , 11 , 3 ).offsetIn(test))
152- assertEquals(TimeZone .of(" -5" ), createInstant(offset, 2008 , 11 , 4 ).offsetIn(test))
153- assertEquals(TimeZone .of(" -5" ), createInstant(offset, 2008 , 11 , 5 ).offsetIn(test))
154- assertEquals(TimeZone .of(" -5" ), createInstant(offset, 2008 , 11 , 6 ).offsetIn(test))
155- assertEquals(TimeZone .of(" -5" ), createInstant(offset, 2008 , 11 , 7 ).offsetIn(test))
164+ val offset = UtcOffset .parse(" -4" )
165+
166+ fun check (expectedOffset : String , dateTime : LocalDateTime ) {
167+ assertEquals(UtcOffset .parse(expectedOffset), dateTime.toInstant(offset).offsetIn(test))
168+ }
169+
170+ check(" -4" , LocalDateTime (2008 , 11 , 1 ))
171+ check(" -4" , LocalDateTime (2008 , 11 , 2 ))
172+ check(" -5" , LocalDateTime (2008 , 11 , 3 ))
173+ check(" -5" , LocalDateTime (2008 , 11 , 4 ))
174+ check(" -5" , LocalDateTime (2008 , 11 , 5 ))
175+ check(" -5" , LocalDateTime (2008 , 11 , 6 ))
176+ check(" -5" , LocalDateTime (2008 , 11 , 7 ))
156177 // cutover at 02:00 local
157- assertEquals( TimeZone .of( " -4" ), createInstant(offset, 2008 , 11 , 2 , 1 , 59 , 59 , 999999999 ).offsetIn(test ))
158- assertEquals( TimeZone .of( " -5" ), createInstant(offset, 2008 , 11 , 2 , 2 , 0 , 0 , 0 ).offsetIn(test ))
178+ check( " -4" , LocalDateTime ( 2008 , 11 , 2 , 1 , 59 , 59 , 999999999 ))
179+ check( " -5" , LocalDateTime ( 2008 , 11 , 2 , 2 , 0 , 0 , 0 ))
159180 }
160181
161- // from 310bp
162- private fun createInstant (offset : TimeZone , year : Int , month : Int , day : Int , hour : Int = 0, min : Int = 0,
163- sec : Int = 0, nano : Int = 0): Instant =
164- LocalDateTime (year, month, day, hour, min, sec, nano).toInstant(offset)
182+ private fun LocalDateTime (year : Int , monthNumber : Int , dayOfMonth : Int ) = LocalDateTime (year, monthNumber, dayOfMonth, 0 , 0 )
183+
165184}
0 commit comments