package org.sql2o.converters.joda; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.joda.time.LocalDateTime; import org.sql2o.converters.Converter; import org.sql2o.converters.ConverterException; import java.sql.Timestamp; /** * Used by sql2o to convert a value from the database into a {@link DateTime} instance. */ public class DateTimeConverter implements Converter<DateTime> { private final DateTimeZone timeZone; // it's possible to create instance for other timezone // and re-register converter public DateTimeConverter(DateTimeZone timeZone) { this.timeZone = timeZone; } public DateTimeConverter() { this(DateTimeZone.getDefault()); } public DateTime convert(Object val) throws ConverterException { if (val == null){ return null; } try { // Joda has it's own pluggable converters infrastructure // it will throw IllegalArgumentException if can't convert // look @ org.joda.time.convert.ConverterManager return new LocalDateTime(val).toDateTime(timeZone); } catch (IllegalArgumentException ex) { throw new ConverterException("Error while converting type " + val.getClass().toString() + " to jodatime", ex); } } public Object toDatabaseParam(DateTime val) { return new Timestamp(val.getMillis()); } }