All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.owlike.genson.ext.javadatetime.OffsetDateTimeConverter Maven / Gradle / Ivy

package com.owlike.genson.ext.javadatetime;

import java.time.OffsetDateTime;
import java.time.temporal.ChronoField;
import java.time.temporal.TemporalField;
import java.util.LinkedHashMap;

/**
 * Converter for values of type {@link OffsetDateTime}
 */
public class OffsetDateTimeConverter extends BaseTemporalAccessorConverter {
	OffsetDateTimeConverter(DateTimeConverterOptions options) {
		super(options, new OffsetDateTimeTimestampHandler(options), OffsetDateTime::from);
	}

	private static class OffsetDateTimeTimestampHandler extends TimestampHandler {
		private static final LinkedHashMap OFFSET_DATE_TIME_TEMPORAL_FIELDS = new LinkedHashMap<>();
		static{
			OFFSET_DATE_TIME_TEMPORAL_FIELDS.put("year", ChronoField.YEAR);
			OFFSET_DATE_TIME_TEMPORAL_FIELDS.put("month", ChronoField.MONTH_OF_YEAR);
			OFFSET_DATE_TIME_TEMPORAL_FIELDS.put("day", ChronoField.DAY_OF_MONTH);
			OFFSET_DATE_TIME_TEMPORAL_FIELDS.put("hour", ChronoField.HOUR_OF_DAY);
			OFFSET_DATE_TIME_TEMPORAL_FIELDS.put("minute", ChronoField.MINUTE_OF_HOUR);
			OFFSET_DATE_TIME_TEMPORAL_FIELDS.put("second", ChronoField.SECOND_OF_MINUTE);
			OFFSET_DATE_TIME_TEMPORAL_FIELDS.put("nano", ChronoField.NANO_OF_SECOND);
			OFFSET_DATE_TIME_TEMPORAL_FIELDS.put("offsetSeconds", ChronoField.OFFSET_SECONDS);
		}

		private OffsetDateTimeTimestampHandler(DateTimeConverterOptions options) {
			super(ot -> DateTimeUtil.instantToMillis(ot.toInstant()),
					millis -> OffsetDateTime.ofInstant(DateTimeUtil.instantFromMillis(millis), options.getZoneId()),
					ot -> DateTimeUtil.instantToNanos(ot.toInstant()),
					nanos -> OffsetDateTime.ofInstant(DateTimeUtil.instantFromNanos(nanos), options.getZoneId()),
					OFFSET_DATE_TIME_TEMPORAL_FIELDS, OffsetDateTime::now);
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy