diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/io/TimestampWritable.java b/serde/src/java/org/apache/hadoop/hive/serde2/io/TimestampWritable.java index 6866d49..144a326 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/io/TimestampWritable.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/io/TimestampWritable.java @@ -21,8 +21,6 @@ import java.io.DataOutput; import java.io.IOException; import java.sql.Timestamp; -import java.text.DateFormat; -import java.text.SimpleDateFormat; import java.util.Date; import org.apache.hadoop.hive.common.type.HiveDecimal; @@ -32,6 +30,8 @@ import org.apache.hadoop.hive.serde2.lazybinary.LazyBinaryUtils.VInt; import org.apache.hadoop.io.WritableComparable; import org.apache.hadoop.io.WritableUtils; +import org.joda.time.format.DateTimeFormat; +import org.joda.time.format.DateTimeFormatter; /** * TimestampWritable @@ -66,13 +66,8 @@ public static final int BINARY_SORTABLE_LENGTH = 11; - private static final ThreadLocal threadLocalDateFormat = - new ThreadLocal() { - @Override - protected DateFormat initialValue() { - return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - } - }; + private static final String TIMESTAMP_PATTERN = "yyyy-MM-dd HH:mm:ss"; + private static final DateTimeFormatter jodaFormatter = DateTimeFormat.forPattern(TIMESTAMP_PATTERN).withZoneUTC(); private Timestamp timestamp = new Timestamp(0); @@ -389,17 +384,11 @@ public String toString() { populateTimestamp(); } - String timestampString = timestamp.toString(); - if (timestampString.length() > 19) { - if (timestampString.length() == 21) { - if (timestampString.substring(19).compareTo(".0") == 0) { - return threadLocalDateFormat.get().format(timestamp); - } - } - return threadLocalDateFormat.get().format(timestamp) + timestampString.substring(19); + if (timestamp.getNanos() > 0) { + return timestamp.toString(); } - return threadLocalDateFormat.get().format(timestamp); + return jodaFormatter.print(timestamp.getTime()); } @Override diff --git a/storage-api/src/java/org/apache/hadoop/hive/serde2/io/DateWritable.java b/storage-api/src/java/org/apache/hadoop/hive/serde2/io/DateWritable.java index 637720a..e41ffd3 100644 --- a/storage-api/src/java/org/apache/hadoop/hive/serde2/io/DateWritable.java +++ b/storage-api/src/java/org/apache/hadoop/hive/serde2/io/DateWritable.java @@ -214,8 +214,7 @@ public boolean equals(Object o) { @Override public String toString() { - // For toString, the time does not matter - return get(false).toString(); + return new Date(daysSinceEpoch * MILLIS_PER_DAY).toString(); } @Override