package com.test.udf;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
public class AddMonth extends UDF {
public Text evaluate(Text dateTx, IntWritable monthIw) {
String dateStr = dateTx.toString();
int month = Integer.parseInt(monthIw.toString());
String dateRs = getDateResult(dateStr, month);
if (dateRs != null) {
return new Text(dateRs);
} else {
return null;
}
}
public static String getDateResult(String dateStr, int month) {
String dateRs = null;
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date dt = sdf.parse(dateStr);
Calendar rightNow = Calendar.getInstance();
rightNow.setTime(dt);
rightNow.add(Calendar.MONTH, month);
dateRs = sdf.format(rightNow.getTime());
} catch (ParseException e) {
e.printStackTrace();
}
return dateRs;
}
public static void main(String[] args) throws ParseException {
AddMonth ad = new AddMonth();
System.out.println(ad.evaluate(new Text("2017-01-01"), new IntWritable( -1)));
}
}