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,22 @@ 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 ;
639
+ long ts ;
643
640
if (value instanceof LocalDateTime ) {
644
641
LocalDateTime dt = (LocalDateTime ) value ;
645
642
ts = dt .atZone (targetTz ).toEpochSecond ();
646
643
} else if (value instanceof ZonedDateTime ) {
647
644
ZonedDateTime dt = (ZonedDateTime ) value ;
648
- ts = dt .withZoneSameInstant ( targetTz ). toEpochSecond ();
645
+ ts = dt .toEpochSecond ();
649
646
} else if (value instanceof Timestamp ) {
650
647
Timestamp t = (Timestamp ) value ;
651
648
ts = t .toLocalDateTime ().atZone (targetTz ).toEpochSecond ();
649
+ } else if (value instanceof OffsetDateTime ) {
650
+ OffsetDateTime dt = (OffsetDateTime ) value ;
651
+ ts = dt .toEpochSecond ();
652
+ } else if (value instanceof Instant ) {
653
+ Instant dt = (Instant ) value ;
654
+ ts = dt .getEpochSecond ();
652
655
} else {
653
656
throw new IllegalArgumentException ("Cannot convert " + value + " to DataTime" );
654
657
}
@@ -661,20 +664,30 @@ public static void writeDateTime64(OutputStream output, Object value, int scale,
661
664
throw new IllegalArgumentException ("Invalid scale value '" + scale + "'" );
662
665
}
663
666
664
- long ts = 0 ;
665
- long nano = 0 ;
667
+ long ts ;
668
+ long nano ;
666
669
if (value instanceof LocalDateTime ) {
667
- ZonedDateTime dt = ((LocalDateTime ) value ).atZone (targetTz );
668
- ts = dt .toEpochSecond ();
669
- nano = dt .getNano ();
670
+ LocalDateTime dt = (LocalDateTime ) value ;
671
+ ZonedDateTime zdt = dt .atZone (targetTz );
672
+ ts = zdt .toEpochSecond ();
673
+ nano = zdt .getNano ();
670
674
} else if (value instanceof ZonedDateTime ) {
671
- ZonedDateTime dt = (( ZonedDateTime ) value ). withZoneSameInstant ( targetTz ) ;
675
+ ZonedDateTime dt = (ZonedDateTime ) value ;
672
676
ts = dt .toEpochSecond ();
673
677
nano = dt .getNano ();
674
678
} else if (value instanceof Timestamp ) {
675
- ZonedDateTime dt = ((Timestamp ) value ).toLocalDateTime ().atZone (targetTz );
679
+ Timestamp dt = (Timestamp ) value ;
680
+ ZonedDateTime zdt = dt .toLocalDateTime ().atZone (targetTz );
681
+ ts = zdt .toEpochSecond ();
682
+ nano = zdt .getNano ();
683
+ } else if (value instanceof OffsetDateTime ) {
684
+ OffsetDateTime dt = (OffsetDateTime ) value ;
676
685
ts = dt .toEpochSecond ();
677
686
nano = dt .getNano ();
687
+ } else if (value instanceof Instant ) {
688
+ Instant dt = (Instant ) value ;
689
+ ts = dt .getEpochSecond ();
690
+ nano = dt .getNano ();
678
691
} else {
679
692
throw new IllegalArgumentException ("Cannot convert " + value + " to DataTime" );
680
693
}
0 commit comments