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.    

Antworten auf die Frage(2)

Ihre Antwort auf die Frage