2727import org .junit .Ignore ;
2828import org .junit .Test ;
2929
30+ import java .time .DateTimeException ;
31+ import java .time .Instant ;
3032import java .time .ZoneId ;
3133import java .time .ZoneOffset ;
32- import java .time .ZonedDateTime ;
3334import java .util .TimeZone ;
3435
3536import static org .junit .Assert .assertEquals ;
37+ import static org .junit .Assert .assertThrows ;
3638import static org .junit .Assert .fail ;
3739
3840public class DateTimeUtilsTest {
@@ -47,7 +49,7 @@ public class DateTimeUtilsTest {
4749 /** Test convertDatetimeStrToLong() method with different time precision. */
4850 @ Test
4951 public void convertDatetimeStrToLongTest1 () {
50- zoneOffset = ZonedDateTime . now ( ).getOffset ();
52+ zoneOffset = Instant . ofEpochMilli ( timestamp ). atZone ( ZoneId . systemDefault () ).getOffset ();
5153 zoneId = ZoneId .systemDefault ();
5254 if (zoneOffset .toString ().equals ("Z" )) {
5355 delta = 8 * 3600000 ;
@@ -338,4 +340,81 @@ public void testConstructTimeDuration() {
338340 timeDuration = DateTimeUtils .constructTimeDuration ("10000000000ms" );
339341 Assert .assertEquals (10000000000L , timeDuration .nonMonthDuration );
340342 }
343+
344+ @ Test
345+ public void testToZoneOffsetForWinterTime () {
346+ ZoneId zoneId = ZoneId .of ("Europe/Warsaw" );
347+ ZoneOffset offset = DateTimeUtils .toZoneOffset ("2024-01-15 12:00:00" , zoneId );
348+ Assert .assertEquals (ZoneOffset .ofHours (1 ), offset );
349+ }
350+
351+ @ Test
352+ public void testToZoneOffsetForSummerTime () {
353+ ZoneId zoneId = ZoneId .of ("Europe/Warsaw" );
354+ ZoneOffset offset = DateTimeUtils .toZoneOffset ("2024-06-15 12:00:00" , zoneId );
355+ Assert .assertEquals (ZoneOffset .ofHours (2 ), offset );
356+ }
357+
358+ @ Test
359+ public void testToZoneOffsetJustBeforeSpringDST () {
360+ ZoneId zoneId = ZoneId .of ("Europe/Warsaw" );
361+ ZoneOffset offset = DateTimeUtils .toZoneOffset ("2024-03-31 02:00:00" , zoneId );
362+ Assert .assertEquals (ZoneOffset .ofHours (1 ), offset );
363+ }
364+
365+ @ Test
366+ public void testToZoneOffsetJustAfterSpringDST () {
367+ ZoneId zoneId = ZoneId .of ("Europe/Warsaw" );
368+ ZoneOffset offset = DateTimeUtils .toZoneOffset ("2024-03-31 03:00:00" , zoneId );
369+ Assert .assertEquals (ZoneOffset .ofHours (2 ), offset );
370+ }
371+
372+ @ Test
373+ public void testToZoneOffsetDuringSpringDSTGap () {
374+ ZoneId zoneId = ZoneId .of ("Europe/Warsaw" );
375+ ZoneOffset offset = DateTimeUtils .toZoneOffset ("2024-03-31 02:30:00" , zoneId );
376+ Assert .assertEquals (ZoneOffset .ofHours (1 ), offset );
377+ }
378+
379+ @ Test
380+ public void testToZoneOffsetDuringAutumnDSTTransition () {
381+ ZoneId zoneId = ZoneId .of ("Europe/Warsaw" );
382+ ZoneOffset offset = DateTimeUtils .toZoneOffset ("2024-10-27 02:30:00" , zoneId );
383+ Assert .assertEquals (ZoneOffset .ofHours (2 ), offset );
384+ }
385+
386+ @ Test
387+ public void testToZoneOffsetAfterAutumnDST () {
388+ ZoneId zoneId = ZoneId .of ("Europe/Warsaw" );
389+ ZoneOffset offset = DateTimeUtils .toZoneOffset ("2024-10-27 03:00:00" , zoneId );
390+ Assert .assertEquals (ZoneOffset .ofHours (1 ), offset );
391+ }
392+
393+ @ Test
394+ public void testToZoneOffsetWithExplicitOffsetInString () {
395+ ZoneId zoneId = ZoneId .of ("Europe/Warsaw" );
396+ ZoneOffset offset = DateTimeUtils .toZoneOffset ("2024-06-15 12:00:00+02:00" , zoneId );
397+ Assert .assertEquals (ZoneOffset .ofHours (2 ), offset );
398+ offset = DateTimeUtils .toZoneOffset ("2024-06-15 12:00:00Z" , zoneId );
399+ Assert .assertEquals (ZoneOffset .UTC , offset );
400+ offset = DateTimeUtils .toZoneOffset ("2024-06-15 12:00:00-08:00" , zoneId );
401+ Assert .assertEquals (ZoneOffset .ofHours (-8 ), offset );
402+ }
403+
404+ @ Test
405+ public void testToZoneOffsetWithUTCZoneId () {
406+ ZoneId utc = ZoneId .of ("UTC" );
407+ Assert .assertEquals (ZoneOffset .UTC , DateTimeUtils .toZoneOffset ("2024-06-15 12:00:00" , utc ));
408+ }
409+
410+ @ Test
411+ public void testToZoneOffsetWithBrokenDate () {
412+ ZoneId zoneId = ZoneId .of ("Europe/Warsaw" );
413+ DateTimeException exception =
414+ assertThrows (
415+ DateTimeException .class ,
416+ () -> {
417+ DateTimeUtils .toZoneOffset ("2024-12-31 10" , zoneId );
418+ });
419+ }
341420}
0 commit comments