.../hadoop/hive/serde2/io/TimestampWritable.java | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) 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..42e8dbe 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,10 +21,9 @@ 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.commons.lang.time.FastDateFormat; import org.apache.hadoop.hive.common.type.HiveDecimal; import org.apache.hadoop.hive.ql.util.TimestampUtils; import org.apache.hadoop.hive.serde2.ByteStream.RandomAccessOutput; @@ -60,19 +59,12 @@ private static final long SEVEN_BYTE_LONG_SIGN_FLIP = 0xff80L << 48; - /** The maximum number of bytes required for a TimestampWritable */ public static final int MAX_BYTES = 13; 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 FastDateFormat DATE_FORMATTER = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss"); private Timestamp timestamp = new Timestamp(0); @@ -393,13 +385,13 @@ public String toString() { if (timestampString.length() > 19) { if (timestampString.length() == 21) { if (timestampString.substring(19).compareTo(".0") == 0) { - return threadLocalDateFormat.get().format(timestamp); + return DATE_FORMATTER.format(timestamp); } } - return threadLocalDateFormat.get().format(timestamp) + timestampString.substring(19); + return DATE_FORMATTER.format(timestamp) + timestampString.substring(19); } - return threadLocalDateFormat.get().format(timestamp); + return DATE_FORMATTER.format(timestamp); } @Override