计算Hive中除星期日以外的天数

vqlkdk9b  于 2021-06-28  发布在  Hive
关注(0)|答案(1)|浏览(390)

我有两个时间戳作为输入。我想计算这些时间戳之间的时间差(不包括星期天)。
我可以在hive中使用datediff函数获得天数。
我可以使用from\u unixtime(unix\u timestamp(startdate),'eeee')获取特定日期的日期。
但我不知道如何关联这些功能来实现我的要求,或者有没有其他简单的方法来实现这一点。
提前谢谢。

kmb7vmvb

kmb7vmvb1#

您可以编写一个自定义自定义自定义项,它将包含日期的两列作为输入,并计算不包括星期日在内的日期之间的差异。

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Date;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;

public class IsoYearWeek extends UDF {

  public LongWritable evaluate(Text dateString,Text dateString1) throws ParseException { //takes the two columns as inputs
    SimpleDateFormat date = new SimpleDateFormat("dd/MM/yyyy");
/*  String date1 = "20/07/2016";
    String date2 = "28/07/2016";

* /  int count=0;

    List<Date> dates = new ArrayList<Date>();

    Date  startDate = (Date)date.parse(dateString.toString()); 
    Date  endDate = (Date)date.parse(dateString1.toString());
    long interval = 24*1000 * 60 * 60; // 1 hour in millis
    long endTime =endDate.getTime() ; // create your endtime here, possibly using Calendar or Date
    long curTime = startDate.getTime();
    while (curTime <= endTime) {
        dates.add(new Date(curTime));
        curTime += interval;
    }
    for(int i=0;i<dates.size();i++){
        Date lDate =(Date)dates.get(i);
        if(lDate.getDay()==0){
            count+=1;  //counts the number of sundays in between
        }
    }

        long days_diff = (endDate.getTime()-startDate.getTime())/(24 * 60 * 60 * 1000)-count; //displays the days difference excluding sundays
        return new LongWritable(days_diff);

  }

}

相关问题