diff options
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/com/amazon/carbonado/adapter/DateTimeAdapter.java | 123 |
1 files changed, 77 insertions, 46 deletions
diff --git a/src/main/java/com/amazon/carbonado/adapter/DateTimeAdapter.java b/src/main/java/com/amazon/carbonado/adapter/DateTimeAdapter.java index fc12319..d9b3577 100644 --- a/src/main/java/com/amazon/carbonado/adapter/DateTimeAdapter.java +++ b/src/main/java/com/amazon/carbonado/adapter/DateTimeAdapter.java @@ -76,6 +76,12 @@ public @interface DateTimeAdapter { * default time zone.
*/
String timeZone() default "";
+
+ /**
+ * Optionally specify a time zone for the DateTime value as persisted.
+ */
+ String timeZonePersisted() default "";
+ String timeZoneActual() default "";
/**
* Adapter implementation for {@link DateTimeAdapter}.
@@ -124,7 +130,7 @@ public @interface DateTimeAdapter { .toFormatter();
}
- private static DateTimeZone toDateTimeZone(DateTimeAdapter ann) {
+ private static DateTimeZone getDisplayDateTimeZone(DateTimeAdapter ann) {
String id;
if (ann == null || (id = ann.timeZone()) == null || id.length() == 0) {
return null;
@@ -132,8 +138,26 @@ public @interface DateTimeAdapter { return DateTimeZone.forID(id);
}
+ private static DateTimeZone getPersistedDateTimeZone(DateTimeAdapter ann) {
+ String id;
+ if (ann == null || (id = ann.timeZonePersisted()) == null || id.length() == 0) {
+ return getDisplayDateTimeZone(ann);
+ }
+ return DateTimeZone.forID(id);
+ }
+
+ private static DateTimeZone getActualDateTimeZone(DateTimeAdapter ann) {
+ String id;
+ if (ann == null || (id = ann.timeZoneActual()) == null || id.length() == 0) {
+ return getDisplayDateTimeZone(ann);
+ }
+ return DateTimeZone.forID(id);
+ }
+
private final String mPropertyName;
- private final DateTimeZone mZone;
+ private final DateTimeZone mPersistedZone;
+ private final DateTimeZone mActualZone;
+ private final DateTimeZone mDisplayZone;
private final DateTimeFormatter mDateTimeParser;
/**
@@ -142,7 +166,7 @@ public @interface DateTimeAdapter { * @param ann specific annotation that binds to this adapter class
*/
public Adapter(Class<?> type, String propertyName, DateTimeAdapter ann) {
- this(type, propertyName, toDateTimeZone(ann));
+ this(type, propertyName, getDisplayDateTimeZone(ann), getPersistedDateTimeZone(ann), getActualDateTimeZone(ann));
}
/**
@@ -150,20 +174,27 @@ public @interface DateTimeAdapter { * @param propertyName name of property with
* @param zone time zone to apply, or null to use default
*/
- public Adapter(Class<?> type, String propertyName, DateTimeZone zone) {
+ public Adapter(Class<?> type, String propertyName, DateTimeZone displayZone, DateTimeZone persistedZone, DateTimeZone actualZone) {
mPropertyName = propertyName;
- mZone = zone;
- mDateTimeParser = cDateTimeParser.withZone(zone);
+ mDisplayZone = displayZone;
+ mPersistedZone = persistedZone;
+ mActualZone = actualZone;
+ if (!mPersistedZone.equals(mActualZone))
+ DateTimeZone.setDefault(mActualZone);
+ mDateTimeParser = cDateTimeParser.withZone(persistedZone);
}
+ public Adapter(Class<?> type, String propertyName, DateTimeZone displayZone) {
+ this(type, propertyName, displayZone, displayZone, displayZone);
+ }
// Adapt to DateTime...
public DateTime adaptToDateTime(long instant) {
- return new DateTime(instant, mZone);
+ return new DateTime(instant, mPersistedZone);
}
public DateTime adaptToDateTime(Long instant) {
- return instant == null ? null : new DateTime(instant, mZone);
+ return instant == null ? null : (new DateTime(instant, mPersistedZone).withZoneRetainFields(mActualZone)).withZone(mDisplayZone);
}
public DateTime adaptToDateTime(String isoDateString) {
@@ -171,116 +202,116 @@ public @interface DateTimeAdapter { }
public DateTime adaptToDateTime(Date date) {
- return date == null ? null : new DateTime(date, mZone);
+ return date == null ? null : (new DateTime(date, mPersistedZone).withZoneRetainFields(mActualZone)).withZone(mDisplayZone);
}
public DateTime adaptToDateTime(java.sql.Date date) {
- return date == null ? null : new DateTime(date.getTime(), mZone);
+ return date == null ? null : new DateTime(date.getTime(), mPersistedZone).withZoneRetainFields(mActualZone).withZone(mDisplayZone);
}
public DateTime adaptToDateTime(Time time) {
- return time == null ? null : new DateTime(time.getTime(), mZone);
+ return time == null ? null : new DateTime(time.getTime(), mPersistedZone).withZoneRetainFields(mActualZone).withZone(mDisplayZone);
}
public DateTime adaptToDateTime(Timestamp timestamp) {
- return timestamp == null ? null : new DateTime(timestamp.getTime(), mZone);
+ return timestamp == null ? null : new DateTime(timestamp.getTime(), mPersistedZone).withZoneRetainFields(mActualZone).withZone(mDisplayZone);
}
// Adapt to DateMidnight...
public DateMidnight adaptToDateMidnight(long instant) {
- return new DateMidnight(instant, mZone);
+ return new DateMidnight(instant, mPersistedZone);
}
public DateMidnight adaptToDateMidnight(Long instant) {
- return instant == null ? null : new DateMidnight(instant, mZone);
+ return instant == null ? null : new DateMidnight(instant, mPersistedZone);
}
public DateMidnight adaptToDateMidnight(String isoDateString) {
- return isoDateString == null ? null : new DateMidnight(isoDateString, mZone);
+ return isoDateString == null ? null : new DateMidnight(isoDateString, mPersistedZone);
}
public DateMidnight adaptToDateMidnight(Date date) {
- return date == null ? null : new DateMidnight(date, mZone);
+ return date == null ? null : new DateMidnight(date, mPersistedZone);
}
public DateMidnight adaptToDateMidnight(java.sql.Date date) {
- return date == null ? null : new DateMidnight(date.getTime(), mZone);
+ return date == null ? null : new DateMidnight(date.getTime(), mPersistedZone);
}
public DateMidnight adaptToDateMidnight(Time time) {
- return time == null ? null : new DateMidnight(time.getTime(), mZone);
+ return time == null ? null : new DateMidnight(time.getTime(), mPersistedZone);
}
public DateMidnight adaptToDateMidnight(Timestamp timestamp) {
- return timestamp == null ? null : new DateMidnight(timestamp.getTime(), mZone);
+ return timestamp == null ? null : new DateMidnight(timestamp.getTime(), mPersistedZone);
}
// Adapt to LocalDateTime...
public LocalDateTime adaptToLocalDateTime(long instant) {
- return new LocalDateTime(instant, mZone);
+ return new LocalDateTime(instant, mPersistedZone);
}
public LocalDateTime adaptToLocalDateTime(Long instant) {
- return instant == null ? null : new LocalDateTime(instant, mZone);
+ return instant == null ? null : new LocalDateTime(instant, mPersistedZone);
}
public LocalDateTime adaptToLocalDateTime(String isoDateString) {
- return isoDateString == null ? null : new LocalDateTime(isoDateString, mZone);
+ return isoDateString == null ? null : new LocalDateTime(isoDateString, mPersistedZone);
}
public LocalDateTime adaptToLocalDateTime(Date date) {
- return date == null ? null : new LocalDateTime(date, mZone);
+ return date == null ? null : new LocalDateTime(date, mPersistedZone);
}
public LocalDateTime adaptToLocalDateTime(java.sql.Date date) {
- return date == null ? null : new LocalDateTime(date.getTime(), mZone);
+ return date == null ? null : new LocalDateTime(date.getTime(), mPersistedZone);
}
public LocalDateTime adaptToLocalDateTime(Time time) {
- return time == null ? null : new LocalDateTime(time.getTime(), mZone);
+ return time == null ? null : new LocalDateTime(time.getTime(), mPersistedZone);
}
public LocalDateTime adaptToLocalDateTime(Timestamp timestamp) {
- return timestamp == null ? null : new LocalDateTime(timestamp.getTime(), mZone);
+ return timestamp == null ? null : new LocalDateTime(timestamp.getTime(), mPersistedZone);
}
// Adapt to LocalDate...
public LocalDate adaptToLocalDate(long instant) {
- return new LocalDate(instant, mZone);
+ return new LocalDate(instant, mPersistedZone);
}
public LocalDate adaptToLocalDate(Long instant) {
- return instant == null ? null : new LocalDate(instant, mZone);
+ return instant == null ? null : new LocalDate(instant, mPersistedZone);
}
public LocalDate adaptToLocalDate(String isoDateString) {
- return isoDateString == null ? null : new LocalDate(isoDateString, mZone);
+ return isoDateString == null ? null : new LocalDate(isoDateString, mPersistedZone);
}
public LocalDate adaptToLocalDate(Date date) {
- return date == null ? null : new LocalDate(date, mZone);
+ return date == null ? null : new LocalDate(date, mPersistedZone);
}
public LocalDate adaptToLocalDate(java.sql.Date date) {
- return date == null ? null : new LocalDate(date.getTime(), mZone);
+ return date == null ? null : new LocalDate(date.getTime(), mPersistedZone);
}
public LocalDate adaptToLocalDate(Time time) {
- return time == null ? null : new LocalDate(time.getTime(), mZone);
+ return time == null ? null : new LocalDate(time.getTime(), mPersistedZone);
}
public LocalDate adaptToLocalDate(Timestamp timestamp) {
- return timestamp == null ? null : new LocalDate(timestamp.getTime(), mZone);
+ return timestamp == null ? null : new LocalDate(timestamp.getTime(), mPersistedZone);
}
// Adapt from DateTime and DateMidnight... (accept the more generic ReadableInstant)
public long adaptToLong(ReadableInstant instant) {
if (instant != null) {
- return instant.getMillis();
+ return new DateTime(instant, mDisplayZone).withZoneRetainFields(mPersistedZone).getMillis();
}
throw new IllegalArgumentException
("Cannot adapt null instant into long for property \"" +
@@ -315,7 +346,7 @@ public @interface DateTimeAdapter { public long adaptToLong(LocalDateTime dateTime) {
if (dateTime != null) {
- return dateTime.toDateTime(mZone).getMillis();
+ return dateTime.toDateTime(mPersistedZone).getMillis();
}
throw new IllegalArgumentException
("Cannot adapt null datetime into long for property \"" +
@@ -323,7 +354,7 @@ public @interface DateTimeAdapter { }
public Long adaptToLongObj(LocalDateTime dateTime) {
- return dateTime == null ? null : dateTime.toDateTime(mZone).getMillis();
+ return dateTime == null ? null : dateTime.toDateTime(mPersistedZone).getMillis();
}
public String adaptToString(LocalDateTime dateTime) {
@@ -331,27 +362,27 @@ public @interface DateTimeAdapter { }
public Date adaptToDate(LocalDateTime dateTime) {
- return dateTime == null ? null : dateTime.toDateTime(mZone).toDate();
+ return dateTime == null ? null : dateTime.toDateTime(mPersistedZone).toDate();
}
public java.sql.Date adaptToSqlDate(LocalDateTime dateTime) {
return dateTime == null ? null
- : new java.sql.Date(dateTime.toDateTime(mZone).getMillis());
+ : new java.sql.Date(dateTime.toDateTime(mPersistedZone).getMillis());
}
public Time adaptToSqlTime(LocalDateTime dateTime) {
- return dateTime == null ? null : new Time(dateTime.toDateTime(mZone).getMillis());
+ return dateTime == null ? null : new Time(dateTime.toDateTime(mPersistedZone).getMillis());
}
public Timestamp adaptToSqlTimestamp(LocalDateTime dateTime) {
- return dateTime == null ? null : new Timestamp(dateTime.toDateTime(mZone).getMillis());
+ return dateTime == null ? null : new Timestamp(dateTime.toDateTime(mPersistedZone).getMillis());
}
// Adapt from LocalDate...
public long adaptToLong(LocalDate date) {
if (date != null) {
- return date.toDateMidnight(mZone).getMillis();
+ return date.toDateMidnight(mPersistedZone).getMillis();
}
throw new IllegalArgumentException
("Cannot adapt null date into long for property \"" +
@@ -359,7 +390,7 @@ public @interface DateTimeAdapter { }
public Long adaptToLongObj(LocalDate date) {
- return date == null ? null : date.toDateMidnight(mZone).getMillis();
+ return date == null ? null : date.toDateMidnight(mPersistedZone).getMillis();
}
public String adaptToString(LocalDate date) {
@@ -367,15 +398,15 @@ public @interface DateTimeAdapter { }
public Date adaptToDate(LocalDate date) {
- return date == null ? null : date.toDateMidnight(mZone).toDate();
+ return date == null ? null : date.toDateMidnight(mPersistedZone).toDate();
}
public java.sql.Date adaptToSqlDate(LocalDate date) {
- return date == null ? null : new java.sql.Date(date.toDateMidnight(mZone).getMillis());
+ return date == null ? null : new java.sql.Date(date.toDateMidnight(mPersistedZone).getMillis());
}
public Timestamp adaptToSqlTimestamp(LocalDate date) {
- return date == null ? null : new Timestamp(date.toDateMidnight(mZone).getMillis());
+ return date == null ? null : new Timestamp(date.toDateMidnight(mPersistedZone).getMillis());
}
// Adapt to Date...
@@ -421,7 +452,7 @@ public @interface DateTimeAdapter { }
public String adaptToString(Date date) {
- return date == null ? null : new DateTime(date, mZone).toString();
+ return date == null ? null : new DateTime(date, mPersistedZone).toString();
}
public java.sql.Date adaptToSqlDate(Date date) {
|