23
23
import java .net .Inet4Address ;
24
24
import java .net .Inet6Address ;
25
25
import java .sql .Timestamp ;
26
- import java .time .LocalDate ;
27
- import java .time .LocalDateTime ;
28
- import java .time .ZoneId ;
29
- import java .time .ZonedDateTime ;
26
+ import java .time .*;
30
27
import java .util .Arrays ;
31
28
import java .util .HashMap ;
32
29
import java .util .HashSet ;
@@ -639,16 +636,17 @@ public static void writeDateTime32(OutputStream output, Object value, ZoneId tar
639
636
}
640
637
641
638
public static void writeDateTime (OutputStream output , Object value , ZoneId targetTz ) throws IOException {
642
- long ts = 0 ;
643
- if (value instanceof LocalDateTime ) {
644
- LocalDateTime dt = (LocalDateTime ) value ;
639
+ long ts ;
640
+ if (value instanceof LocalDateTime dt ) {
645
641
ts = dt .atZone (targetTz ).toEpochSecond ();
646
- } else if (value instanceof ZonedDateTime ) {
647
- ZonedDateTime dt = (ZonedDateTime ) value ;
648
- ts = dt .withZoneSameInstant (targetTz ).toEpochSecond ();
649
- } else if (value instanceof Timestamp ) {
650
- Timestamp t = (Timestamp ) value ;
642
+ } else if (value instanceof ZonedDateTime dt ) {
643
+ ts = dt .toEpochSecond ();
644
+ } else if (value instanceof Timestamp t ) {
651
645
ts = t .toLocalDateTime ().atZone (targetTz ).toEpochSecond ();
646
+ } else if (value instanceof OffsetDateTime dt ) {
647
+ ts = dt .toEpochSecond ();
648
+ } else if (value instanceof Instant dt ) {
649
+ ts = dt .getEpochSecond ();
652
650
} else {
653
651
throw new IllegalArgumentException ("Cannot convert " + value + " to DataTime" );
654
652
}
@@ -661,19 +659,24 @@ public static void writeDateTime64(OutputStream output, Object value, int scale,
661
659
throw new IllegalArgumentException ("Invalid scale value '" + scale + "'" );
662
660
}
663
661
664
- long ts = 0 ;
665
- long nano = 0 ;
666
- if (value instanceof LocalDateTime ) {
667
- ZonedDateTime dt = ((LocalDateTime ) value ).atZone (targetTz );
662
+ long ts ;
663
+ long nano ;
664
+ if (value instanceof LocalDateTime dt ) {
665
+ ZonedDateTime zdt = dt .atZone (targetTz );
666
+ ts = zdt .toEpochSecond ();
667
+ nano = zdt .getNano ();
668
+ } else if (value instanceof ZonedDateTime dt ) {
668
669
ts = dt .toEpochSecond ();
669
670
nano = dt .getNano ();
670
- } else if (value instanceof ZonedDateTime ) {
671
- ZonedDateTime dt = ((ZonedDateTime ) value ).withZoneSameInstant (targetTz );
671
+ } else if (value instanceof Timestamp dt ) {
672
+ ZonedDateTime zdt = dt .toLocalDateTime ().atZone (targetTz );
673
+ ts = zdt .toEpochSecond ();
674
+ nano = zdt .getNano ();
675
+ } else if (value instanceof OffsetDateTime dt ) {
672
676
ts = dt .toEpochSecond ();
673
677
nano = dt .getNano ();
674
- } else if (value instanceof Timestamp ) {
675
- ZonedDateTime dt = ((Timestamp ) value ).toLocalDateTime ().atZone (targetTz );
676
- ts = dt .toEpochSecond ();
678
+ } else if (value instanceof Instant dt ) {
679
+ ts = dt .getEpochSecond ();
677
680
nano = dt .getNano ();
678
681
} else {
679
682
throw new IllegalArgumentException ("Cannot convert " + value + " to DataTime" );
0 commit comments