diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFMonth.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFMonth.java index 3365804..22ec395 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFMonth.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFMonth.java @@ -20,8 +20,8 @@ import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.Calendar; import java.util.Date; +import org.joda.time.MutableDateTime; import org.apache.hadoop.hive.ql.exec.Description; import org.apache.hadoop.hive.ql.exec.UDF; @@ -50,7 +50,7 @@ @VectorizedExpressions({VectorUDFMonthLong.class, VectorUDFMonthString.class}) public class UDFMonth extends UDF { private final SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); - private final Calendar calendar = Calendar.getInstance(); + private transient final MutableDateTime mdt = new MutableDateTime(); private IntWritable result = new IntWritable(); @@ -72,8 +72,8 @@ public IntWritable evaluate(Text dateString) { } try { Date date = formatter.parse(dateString.toString()); - calendar.setTime(date); - result.set(1 + calendar.get(Calendar.MONTH)); + mdt.setMillis(date.getTime()); + result.set(mdt.getMonthOfYear()); return result; } catch (ParseException e) { return null; @@ -85,8 +85,8 @@ public IntWritable evaluate(DateWritable d) { return null; } - calendar.setTime(d.get()); - result.set(1 + calendar.get(Calendar.MONTH)); + mdt.setMillis(d.get().getTime()); + result.set(mdt.getMonthOfYear()); return result; } @@ -95,8 +95,8 @@ public IntWritable evaluate(TimestampWritable t) { return null; } - calendar.setTime(t.getTimestamp()); - result.set(1 + calendar.get(Calendar.MONTH)); + mdt.setMillis(t.getTimestamp().getTime()); + result.set(mdt.getMonthOfYear()); return result; } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFYear.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFYear.java index 34b0c47..f38460d 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFYear.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFYear.java @@ -20,8 +20,8 @@ import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.Calendar; import java.util.Date; +import org.joda.time.MutableDateTime; import org.apache.hadoop.hive.ql.exec.Description; import org.apache.hadoop.hive.ql.exec.UDF; @@ -50,7 +50,7 @@ @VectorizedExpressions({VectorUDFYearLong.class, VectorUDFYearString.class}) public class UDFYear extends UDF { private final SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); - private final Calendar calendar = Calendar.getInstance(); + private transient final MutableDateTime mdt = new MutableDateTime(); private final IntWritable result = new IntWritable(); @@ -74,8 +74,8 @@ public IntWritable evaluate(Text dateString) { try { Date date = formatter.parse(dateString.toString()); - calendar.setTime(date); - result.set(calendar.get(Calendar.YEAR)); + mdt.setMillis(date.getTime()); + result.set(mdt.getYear()); return result; } catch (ParseException e) { return null; @@ -87,8 +87,8 @@ public IntWritable evaluate(DateWritable d) { return null; } - calendar.setTime(d.get()); - result.set(calendar.get(Calendar.YEAR)); + mdt.setMillis(d.get().getTime()); + result.set(mdt.getYear()); return result; } @@ -97,8 +97,8 @@ public IntWritable evaluate(TimestampWritable t) { return null; } - calendar.setTime(t.getTimestamp()); - result.set(calendar.get(Calendar.YEAR)); + mdt.setMillis(t.getTimestamp().getTime()); + result.set(mdt.getYear()); return result; }