Wie speichere ich Datum und Uhrzeit in UTC mit EclipseLink und Joda-Time in einer Datenbank?
Ich habe mit dem folgenden EclipseLink gefummeltJoda-Zeit Konverter für eine lange Zeit, um Datum und Uhrzeit zu speichernkoordinierte Weltzeit in MySQL-Datenbank ohne Erfolg.
import java.util.Date;
import org.eclipse.persistence.mappings.DatabaseMapping;
import org.eclipse.persistence.mappings.converters.Converter;
import org.eclipse.persistence.sessions.Session;
import org.joda.time.DateTime;
public final class JodaDateTimeConverter implements Converter {
private static final long serialVersionUID = 1L;
@Override
public Object convertObjectValueToDataValue(Object objectValue, Session session) {
//Code to convert org.joda.time.DateTime to java.util.Date in UTC.
//Currently dealing with the following line
//that always uses the system local time zone which is incorrect.
//It should be in the UTC zone.
return objectValue instanceof DateTime ? ((DateTime) objectValue).toDate() : null;
}
@Override
public Object convertDataValueToObjectValue(Object dataValue, Session session) {
return dataValue instanceof Date ? new DateTime((Date) dataValue) : null;
}
@Override
public boolean isMutable() {
return true;
}
@Override
public void initialize(DatabaseMapping databaseMapping, Session session) {
databaseMapping.getField().setType(java.util.Date.class);
}
}
DasobjectValue
Parameter derconvertObjectValueToDataValue()
Methode ist eineinstanceOf
DateTime
das ist schon laut UTC zone. Deshalb habe ich gemieden.withZone(DateTimeZone.UTC)
.
Auf dem Client befindet sich bereits ein separater Konverter, der eine Zeichenfolgendarstellung von Datum und Uhrzeit in konvertiertorg.joda.time.DateTime
in UTC vor dem Senden an EJBs).
Diese((DateTime) objectValue).toDate()
in der Rückgabeerklärung desconvertObjectValueToDataValue()
Methode verwendet immer die lokale Zeitzone des Systems, die in der UTC-Zone liegen soll.
Wie auch immer, Datum und Uhrzeit sollten gemäß der UTC-Zone in MySQL eingefügt werden.
Die beste / ideale Lösung wäre, wenn es Datum und Uhrzeit von Joda ähnlich behandeltÜberwintern
BEARBEITEN:
Eine Eigenschaft vom Typorg.joda.time.DateTime
Als Beispiel wird in einer Modellklasse wie folgt bezeichnet.
@Column(name = "discount_start_date", columnDefinition = "DATETIME")
@Converter(name = "dateTimeConverter", converterClass = JodaDateTimeConverter.class)
@Convert("dateTimeConverter")
private DateTime discountStartDate; //Getter and setter.