需求:给定一个日期,返回该日期的当月月初日期
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.apache.hadoop.hive.ql.exec.UDF;
/**
* 根据输入的日期,返回月初的日期
*/
public class UDFFirstDay extends UDF
{
public static String evaluate(String Date)
throws ParseException
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
Date date = null;
try
{
date = sdf.parse(Date.replace("-", ""));//将传入的参数Date日期中的‘-’替换无,如无则不管
}
catch (ParseException e)
{
e.printStackTrace();
}
cal.setTime(date);
// cal.set(5, cal.getActualMinimum(5));
/*
* java.util.calendar.getActualMinimum()方法的用法,返回日历中最小值
* cal.getActualMinimum(5)=cal.getActualMinimum(cal.DAY_OF_MONTH)返回给出月份的最小值
* cal.DAY_OF_MONTH是Calendar对象给定。的常量,这个常量匹配的值就是5,也就是说在Calendar对象中,
* 5这个整数代表的就是月份中的日期。
* Calendar.DAY_OF_YEAR6 在Calendar中可以用表示
* Calendar.DAY_OF_WEEK可以用7表示
*/
cal.set(cal.DAY_OF_MONTH, 1); //等价于上面:将日期设置为1号,因为每个月默认第一天是1号
return sdf1.format(cal.getTime()); //获取cal的Date对象,以sdf1的格式输出
}
public static void main(String[] args) throws Exception
{
UDFFirstDay o = new UDFFirstDay();
System.out.println(o.evaluate("2018-02-22"));
System.out.println(o.evaluate("20181122"));
}
}
//输出结果如下:
2018-02-01
2018-11-01