1 package com.fasterxml.jackson.datatype.jsr310.ser;
2
3 import com.fasterxml.jackson.annotation.JsonFormat;
4 import java.time.OffsetDateTime;
5 import java.time.format.DateTimeFormatter;
6
7 public class OffsetDateTimeSerializer extends InstantSerializerBase<OffsetDateTime>
8 {
9     private static final long serialVersionUID = 1L;
10
11     public static final OffsetDateTimeSerializer INSTANCE = new OffsetDateTimeSerializer();
12
13     protected OffsetDateTimeSerializer() {
14         super(OffsetDateTime.class, dt -> dt.toInstant().toEpochMilli(),
15                 OffsetDateTime::toEpochSecond, OffsetDateTime::getNano,
16                 DateTimeFormatter.ISO_OFFSET_DATE_TIME);
17     }
18
19     protected OffsetDateTimeSerializer(OffsetDateTimeSerializer base,
20             Boolean useTimestamp, DateTimeFormatter formatter) {
21         this(base, useTimestamp, null, formatter);
22     }
23
24     protected OffsetDateTimeSerializer(OffsetDateTimeSerializer base,
25             Boolean useTimestamp, Boolean useNanoseconds, DateTimeFormatter formatter) {
26         super(base, useTimestamp, useNanoseconds, formatter);
27     }
28
29     @Override
30     protected JSR310FormattedSerializerBase<?> withFormat(Boolean useTimestamp,
31         DateTimeFormatter formatter, JsonFormat.Shape shape)
32     {
33         return new OffsetDateTimeSerializer(this, useTimestamp, formatter);
34     }
35
36     @Override
37     protected JSR310FormattedSerializerBase<?> withFeatures(Boolean writeZoneId, Boolean writeNanoseconds) {
38         return new OffsetDateTimeSerializer(this, _useTimestamp, writeNanoseconds, _formatter);
39     }
40 }
41