001
002package io.vrap.rmf.base.client.utils.json.modules.serializers;
003
004import java.io.IOException;
005import java.time.ZoneOffset;
006import java.time.ZonedDateTime;
007import java.time.format.DateTimeFormatter;
008import java.time.format.DateTimeFormatterBuilder;
009
010import com.fasterxml.jackson.core.JsonGenerator;
011import com.fasterxml.jackson.databind.SerializerProvider;
012import com.fasterxml.jackson.databind.ser.std.StdScalarSerializer;
013
014/**
015 * serializes a {@link ZonedDateTime} to {@link DateTimeFormatter#ISO_DATE} format
016 */
017public final class ZonedDateTimeSerializer extends StdScalarSerializer<ZonedDateTime> {
018
019    static final long serialVersionUID = 0L;
020    private static final DateTimeFormatter FORMATTER = new DateTimeFormatterBuilder().appendInstant(3).toFormatter();
021
022    public ZonedDateTimeSerializer() {
023        super(ZonedDateTime.class);
024    }
025
026    @Override
027    public void serialize(final ZonedDateTime value, final JsonGenerator gen, final SerializerProvider arg2)
028            throws IOException {
029        gen.writeString(FORMATTER.format(value.withZoneSameInstant(ZoneOffset.UTC)));
030    }
031}