001package de.bytefish.pgbulkinsert.pgsql.handlers; 002 003import de.bytefish.pgbulkinsert.pgsql.converter.IValueConverter; 004import de.bytefish.pgbulkinsert.pgsql.converter.LocalDateTimeConverter; 005 006import java.io.DataOutputStream; 007import java.time.LocalDateTime; 008import java.time.ZoneOffset; 009import java.time.ZonedDateTime; 010 011public class ZonedDateTimeValueHandler extends BaseValueHandler<ZonedDateTime> { 012 private IValueConverter<ZonedDateTime, Long> dateTimeConverter; 013 014 public ZonedDateTimeValueHandler() { 015 this(new ToUTCStripTimezone()); 016 } 017 018 public ZonedDateTimeValueHandler(IValueConverter<ZonedDateTime, Long> dateTimeConverter) { 019 this.dateTimeConverter = dateTimeConverter; 020 } 021 022 @Override 023 protected void internalHandle(DataOutputStream buffer, ZonedDateTime value) throws Exception { 024 buffer.writeInt(8); 025 buffer.writeLong(dateTimeConverter.convert(value)); 026 } 027 028 @Override 029 public int getLength(ZonedDateTime value) { 030 return 8; 031 } 032 033 private static final class ToUTCStripTimezone implements IValueConverter<ZonedDateTime, Long> { 034 private final IValueConverter<LocalDateTime, Long> converter = new LocalDateTimeConverter(); 035 036 @Override 037 public Long convert(final ZonedDateTime value) { 038 return converter.convert(value.withZoneSameInstant(ZoneOffset.UTC).toLocalDateTime()); 039 } 040 } 041}