Converters must convert to a data-type, know by the database
[jpa-converters] / src / main / java / de / juplo / jpa / converters / OffsetDateTimeConverter.java
index d49da18..8815cf0 100644 (file)
@@ -1,35 +1,28 @@
 package de.juplo.jpa.converters;
 
+import java.sql.Timestamp;
 import java.time.OffsetDateTime;
-import java.time.ZonedDateTime;
-import java.util.GregorianCalendar;
+import java.time.ZoneOffset;
 import javax.persistence.AttributeConverter;
 import javax.persistence.Converter;
 
 
 /**
- * Converts a {@link OffsetDateTime} to a {@link GregorianCalendar}, by first
- * converting it into a {@link ZonedDateTime} and then converting it as
- * suggested in the official Java 8 Time tutorial.
- * <p>
- * The {@link GregorianCalendar} can then be persisted as
- * {@link java.persistene.TemporalType.TIMESTAMP} with the help of the
- * {@link java.persist.Tmporal}-annotation.
- * @see https://docs.oracle.com/javase/tutorial/datetime/iso/legacy.html
+ * Converts a {@link OffsetDateTime} to a {@link Timestamp}.
  * @author Kai Moritz
  */
 @Converter(autoApply = true)
-public class OffsetDateTimeConverter implements AttributeConverter<OffsetDateTime, GregorianCalendar>
+public class OffsetDateTimeConverter implements AttributeConverter<OffsetDateTime, Timestamp>
 {
   @Override
-  public GregorianCalendar convertToDatabaseColumn(OffsetDateTime odt)
+  public Timestamp convertToDatabaseColumn(OffsetDateTime odt)
   {
-    return GregorianCalendar.from(ZonedDateTime.from(odt));
+    return Timestamp.from(odt.withOffsetSameInstant(ZoneOffset.UTC).toInstant());
   }
 
   @Override
-  public OffsetDateTime convertToEntityAttribute(GregorianCalendar calendar)
+  public OffsetDateTime convertToEntityAttribute(Timestamp ts)
   {
-    return OffsetDateTime.from(calendar.toZonedDateTime());
+    return OffsetDateTime.of(ts.toLocalDateTime(), ZoneOffset.UTC);
   }
 }