目录
1、功能介绍:
首先,介绍一下关于本文函数的作用:
该文介绍的函数功能在统计用户活跃度的场景比较适用,或者跟统计某天,某几天,某周,某几个周,某月,某几个月相关的场景亦可适用。大大降低了hive SQL的编程难度。主要实现的功能如下:
(1)根据输入的时间信息,返回某天的起始时间。
getdaybegin() //计算当天的起始时刻(毫秒数)
getdaybegin(2) //以当天为坐标,指定天偏移量
getdaybegin('2017/06/29 01:02:03') //计算某天的起始时刻(毫秒数)
getdaybegin('2017/06/29 01:02:03',2) //计算以某天为坐标,指定天偏移量的起始时刻(毫秒数)
getdaybegin(date_obj) //计算某天的起始时刻(毫秒数)
getdaybegin(date_obj,2) //计算以某天为坐标,指定天偏移量的起始时刻(毫秒数)
(2)根据输入的时间信息,返回某周的起始时间 。 (注释类似上面)
getweekbegin()
getweekbegin(2)
getweekbegin('2017/06/29 01:02:03')
getweekbegin('2017/06/29 01:02:03',2)
getweekbegin(date_obj)
getweekbegin(date_obj,2)
(3)根据输入的时间信息,返回某月的起始时间。(注释类似上面)
getmonthbegin()
getmonthbegin(2)
getmonthbegin('2017/06/29 01:02:03')
getmonthbegin('2017/06/29 01:02:03',2)
getmonthbegin(date_obj)
getmonthbegin(date_obj,2)
(4)根据输入的时间和时间格式化信息,将long型的时间片格式化成指定日期格式。
formattime(1494392175246,'yyyy/MM/01')
formattime('1494392175246','yyyy/MM/dd')
2、本文中的一些常用类和方法的介绍:
1 SimleDateFormat类下的format( )方法。
//format( ):用于创建格式化的字符串以及连接多个字符串对象。
//format(String format, Object args): 新字符串使用本地语言环境,指定字符串格式和参数生成格式化的新字符串。
//format(Locale locale, String format, Object args):使用指定的语言环境,指定 字符串格式和参数生成格式化的字符串。
2 Calendar类下的常用方法。
//getInstance()使用默认时区和语言环境获得一个日历。
//setTime(Date date)使用给定的 Date 设置此 Calendar 的时间。
//add(int field, int amount) 根据日历的规则,为给定的日历字段添加或减去指定的时间量。
//Calendar.DAY_OF_WEEK:表示一周中的第几天,会因为选用的星期的表达格式的不同而受影响。
有些地区以星期日作为一周的第一天,而有些地区以星期一作为一周的第一天,这2种情况是需要区分的。
3、代码
1、首先导入hive依赖的jar包:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dateUtil</groupId>
<artifactId>app-logs-hive</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>2.1.1</version>
</dependency>
</dependencies>
</project>
2、创建DateUtil类
作用:获取某天,某周,某月的起始零点时间
package com.dateUtil.udf;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
*
*/
public class DateUtil {
/**
* 得到指定date的零时刻.
*/
public static Date getDayBeginTime(Date d) {
try {
SimpleDateFormat sdf = new