package io.ebeaninternal.server.type;
import io.ebean.config.JsonConfig;
import java.sql.Timestamp;
import java.sql.Types;
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneId;
ScalarType for java.sql.Timestamp.
/**
* ScalarType for java.sql.Timestamp.
*/
public class ScalarTypeOffsetDateTime extends ScalarTypeBaseDateTime<OffsetDateTime> {
public ScalarTypeOffsetDateTime(JsonConfig.DateTime mode) {
super(mode, OffsetDateTime.class, false, Types.TIMESTAMP);
}
@Override
protected String toJsonNanos(OffsetDateTime value) {
return toJsonNanos(value.toEpochSecond(), value.getNano());
}
@Override
protected String toJsonISO8601(OffsetDateTime value) {
return value.toInstant().toString();
}
@Override
public long convertToMillis(OffsetDateTime value) {
return value.toInstant().toEpochMilli();
}
@Override
public OffsetDateTime convertFromMillis(long systemTimeMillis) {
return OffsetDateTime.ofInstant(Instant.ofEpochMilli(systemTimeMillis), ZoneId.systemDefault());
}
@Override
public OffsetDateTime convertFromTimestamp(Timestamp ts) {
return OffsetDateTime.ofInstant(ts.toInstant(), ZoneId.systemDefault());
}
@Override
public Timestamp convertToTimestamp(OffsetDateTime t) {
return Timestamp.from(t.toInstant());
}
@Override
public Object toJdbcType(Object value) {
if (value instanceof Timestamp) return value;
return convertToTimestamp((OffsetDateTime) value);
}
@Override
public OffsetDateTime toBeanType(Object value) {
if (value instanceof Timestamp) return convertFromTimestamp((Timestamp) value);
return (OffsetDateTime) value;
}
}