hive获取今天、昨天、明天的日期

主题: 解决Hive获取今天、昨天、明天的日期的问题

注意:由于hive内置函数中,没有提供获取昨天和明天的日期函数,所以需要编写自定义函数去实现


1、获取今天时间(格式可以自定义)

语句:

select from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss')

返回结果:

2016-09-14 16:21:59




2、获取昨天、明天时间(需要编写UDF自定义函数)

(1)此处不大篇幅讲解编写hive udf的buzz,如需查看详细,请见:http://blog.csdn.net/chenjieit619/article/details/53169402

(2)此处只讲实现udf的Java代码如下:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
            
            
import org.apache.hadoop.hive.ql.exec.UDF ;
import org.apache.hadoop.io.Text ;
import java.text.SimpleDateFormat ;
import java.util.Calendar ;
import java.util.Date ;
import java.util.GregorianCalendar ;
/**
* Document:本类作用---->获取明天或者昨天时间
* User: yangjf
* Date: 2016/9/14 16:26
*/
public class NextDay extends UDF {
public String evaluate ( int i ) {
Date date = new Date (); //取时间
Calendar calendar = new GregorianCalendar ();
calendar . setTime ( date );
calendar . add ( calendar . DATE , i ); //把日期往后增加一天.整数往后推,负数往前移动,0代表今天的时间
date = calendar . getTime (); //这个时间就是日期往后推一天的结果
SimpleDateFormat formatter = new SimpleDateFormat ( "yyyy-MM-dd HH:mm:ss" );
String dateString = formatter . format ( date );
return dateString ;
}
public static void main ( String [] args ) {
System . out . println ( "今天时间:" + new NextDay (). evaluate ( 0 ));
System . out . println ( "明天时间:" + new NextDay (). evaluate ( 1 ));
System . out . println ( "昨天天时间:" + new NextDay (). evaluate (- 1 ));
}
}
/**
* 结果:今天时间: 2016 - 09 - 14 16 : 35 : 58
* 明天时间: 2016 - 09 - 15 16 : 35 : 58
* 昨天时间: 2016 - 09 - 13 16 : 35 : 58
* /
 来自CODE的代码片
NextDay.java

(3)在hive中注册临时函数:"getMyDate"

(4)使用函数:

获取今天时间----》select   getMyDate(0);

2016-09-14 16:38:31

获取明天时间----》select   getMyDate(1);

2016-09-15 16:38:31

获取昨天时间----》select   getMyDate(-1);

2016-09-13 16:38:31


以上测试已经通过,可直接使用,如有疑问,请留言,欢迎各位批评指正!

原文地址:http://blog.csdn.net/high2011/article/details/52539071


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值