输出:日期值,格式 yyyy-MM-dd
适用于阿里云MaxCompute平台的UDF源码:
import com.aliyun.odps.udf.UDF; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.List; public final class getSpecificNumberWeek extends UDF{ public String evaluate(String inputDateStr, Long weekNum, String weekName) throws ParseException { //先获取输入的日期是一周中第几天 Date date = null; if (inputDateStr.length() == 19) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); date = sdf.parse(inputDateStr); } else if (inputDateStr.length() == 10) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); date = sdf.parse(inputDateStr); } else if (inputDateStr.length() == 8) { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); date = sdf.parse(inputDateStr); } Calendar cal = Calendar.getInstance(); cal.setTime(date); Integer curWeekIndex = cal.get(Calendar.DAY_OF_WEEK); // System.out.println(curWeekIndex); //获取输入周X是一周中第几天 List<String> weekList = Arrays.asList("SUN","MON","TUE","WED","THU","FRI","SAT"); Integer targetWeekIndex = weekList.indexOf(weekName)+1; // System.out.println(targetWeekIndex); if(targetWeekIndex.equals(-1)){ System.out.println("INPUT WEEK DAY DOES NOT EXIST"); return null; } //判断并输出weekNum 个周期前的weekName Calendar returnDate = Calendar.getInstance(); returnDate.setTime(date); if(curWeekIndex < targetWeekIndex){ returnDate.add(Calendar.DAY_OF_MONTH, (-1)*(7*weekNum.intValue() + curWeekIndex+7-targetWeekIndex)); }else{ returnDate.add(Calendar.DAY_OF_MONTH, (-1)*(7*weekNum.intValue() + curWeekIndex - targetWeekIndex)); } SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); String returnDateStr = format.format(returnDate.getTime()); return returnDateStr; } }