DulcetAirman icon

JPA-Converter for OffsetDateTime

DulcetAirman | PRO | 04/09/21 03:44:20 PM UTC (Edited) | 0 ⭐ | 822 👁️ | Never ⏰ | []
Java |

1.26 KB

|

None

|

0 👍

/

0 👎

/*
This stores timestamps, so there is no time zone in the database.
It reads the timestamp and simply uses UTC.
To get the local time use this:
ZonedDateTime timeLocal = obj.getTimeXYZ().atZoneSameInstant(ZoneId.systemDefault());
*/
 
package XXXXXXXXXXXXXXXXXXXXXXXXXX;
 
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
 
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
 
@Converter(autoApply = true)
public class OffsetDateTimeConverter implements
    AttributeConverter<OffsetDateTime, Timestamp> {
  @Override
  public Timestamp convertToDatabaseColumn(final OffsetDateTime entityValue) {
    if (entityValue == null) {
      return null;
    }
    return Timestamp.valueOf(entityValue.atZoneSameInstant(ZoneOffset.UTC).toLocalDateTime());
  }
 
  @Override
  public OffsetDateTime convertToEntityAttribute(final Timestamp databaseValue) {
    if (databaseValue == null) {
      return null;
    }
    final LocalDateTime localDateTime = databaseValue.toLocalDateTime();
    final ZoneOffset offset = ZoneId.of("UTC").getRules()
        .getOffset(localDateTime);
    return OffsetDateTime.of(localDateTime, offset);
  }
}

Comments