Implemented a LocalTime-to-Date converter
authorKai Moritz <kai@juplo.de>
Mon, 21 Dec 2015 22:05:15 +0000 (23:05 +0100)
committerKai Moritz <kai@juplo.de>
Tue, 15 Aug 2017 17:44:40 +0000 (19:44 +0200)
src/main/java/de/juplo/jpa/converters/LocalTimeConverter.java [new file with mode: 0644]

diff --git a/src/main/java/de/juplo/jpa/converters/LocalTimeConverter.java b/src/main/java/de/juplo/jpa/converters/LocalTimeConverter.java
new file mode 100644 (file)
index 0000000..60019f5
--- /dev/null
@@ -0,0 +1,42 @@
+package de.juplo.jpa.converters;
+
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.ZoneOffset;
+import java.util.Date;
+import javax.persistence.AttributeConverter;
+import javax.persistence.Converter;
+
+
+/**
+ * Converts a {@link LocalTime} to a {@link Date}, by converting it into
+ * an {@Instant} for the GMT-timezone at the date of {@link Instant.EPOCH} and
+ * then convering that {@link Instant} into a {@link Date} as suggested in the
+ * official Java 8 Time tutorial.
+ * <p>
+ * The {@link Date} can then be persisted as
+ * {@link java.persistene.TemporalType.TIME} with the help of the
+ * {@link java.persist.Tmporal}-annotation.
+ * @see https://docs.oracle.com/javase/tutorial/datetime/iso/legacy.html
+ * @author Kai Moritz
+ */
+@Converter(autoApply = true)
+public class LocalTimeConverter implements AttributeConverter<LocalTime, Date>
+{
+  private final static LocalDate EPOCH = LocalDate.from(Instant.EPOCH);
+
+
+  @Override
+  public Date convertToDatabaseColumn(LocalTime lt)
+  {
+    return Date.from(LocalDateTime.of(EPOCH, lt).toInstant(ZoneOffset.UTC));
+  }
+
+  @Override
+  public LocalTime convertToEntityAttribute(Date date)
+  {
+    return LocalTime.from(date.toInstant());
+  }
+}