日期处理工具

package com.example.easyJavaUtil;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.*;

/** 日期时间处理工具 */
public class EasyDateUtil {
	
	/** 一天的毫秒数 */
	private static final long oneDayTime = 24*3600*1000;

	/** yy/MM/dd*/
	public static final SimpleDateFormat DATE_FORMAT_0 = new SimpleDateFormat("yy/MM/dd");
	/** yyyy-MM-dd*/
	public static final SimpleDateFormat DATE_FORMAT_1 = new SimpleDateFormat("yyyy-MM-dd");
	/** yyyyMM*/
	public static final SimpleDateFormat DATE_FORMAT_2 = new SimpleDateFormat("yyyyMM");
	/** yyyyMMddHHmmss*/
	public static final SimpleDateFormat DATE_FORMAT_3 = new SimpleDateFormat("yyyyMMddHHmmss");
	/** yyyy-MM-dd HH:mm:ss*/
	public static final SimpleDateFormat DATE_FORMAT_4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	/** yyyyMMddHHmmssSSS*/
	public static final SimpleDateFormat DATE_FORMAT_5 = new SimpleDateFormat("yyyyMMddHHmmssSSS");
    /** yyyy-MM-dd_HH*/
    public static final SimpleDateFormat DATE_FORMAT_6 = new SimpleDateFormat("yyyy-MM-dd_HH");
    /** yyyyMMdd*/
	public static final SimpleDateFormat DATE_FORMAT_7 = new SimpleDateFormat("yyyyMMdd");

	/**
	 * 计算时间(计算传入时间前几天或者后几天的时间)
	 * @param nowTime	传入时间
	 * @param addNum	要增加的天数(为负数则是减少的天数)
	 * @return	计算后的时间
	 */
	public static long sumDay(long nowTime, int day) {
		return nowTime + (oneDayTime*day);
	}
	/**
	 * 获取几月后或前的时间戳
	 * @param time
	 * @param month
	 * @return
	 */
	public static long sumMonth(long time,int month){
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(new Date(time)); // 设置为当前时间
		calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) + month);
		Date date = calendar.getTime();
		return date.getTime();
	}
	/**
	 * 获取几周后或前的时间戳
	 * @param time
	 * @param month
	 * @return
	 */
	public static long sumWeek(long time,int week){
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(new Date(time)); // 设置为当前时间
		calendar.set(Calendar.WEEK_OF_YEAR, calendar.get(Calendar.WEEK_OF_YEAR) + week);
		Date date = calendar.getTime();
		return date.getTime();
	}
	/**
	 * 获取几年后或前的时间戳
	 * @param time
	 * @param month
	 * @return
	 */
	public static long sumYear(long time,int year){
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(new Date(time)); // 设置为当前时间
		calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR) + year);
		Date date = calendar.getTime();
		return date.getTime();
	}
	/**
	 * 获取星期几
	 * @return
	 */
	public static int getYear(){
		return getYear(System.currentTimeMillis());
	}
	/**
	 * 获取星期几
	 * @return
	 */
	public static int getYear(long time){
		String[] strs = format(DATE_FORMAT_1,time).split("-");
		return LocalDate.of(Integer.valueOf(strs[0]), Integer.valueOf(strs[1]), Integer.valueOf(strs[2])).getYear();
	}
	/**
	 * 获取星期几
	 * @return
	 */
	public static int getWeek(){
		return getWeek(System.currentTimeMillis());
	}
	/**
	 * 获取星期几
	 * @return
	 */
	public static int getWeek(long time){
		String[] strs = format(DATE_FORMAT_1,time).split("-");
		return LocalDate.of(Integer.valueOf(strs[0]), Integer.valueOf(strs[1]), Integer.valueOf(strs[2])).getDayOfWeek().getValue();
	}
	/**
	 * 获取月份
	 * @param time	时间戳
	 * @return
	 */
	public static int getMonth(long time){
		String[] strs = format(DATE_FORMAT_1,time).split("-");
		return LocalDate.of(Integer.valueOf(strs[0]), Integer.valueOf(strs[1]), Integer.valueOf(strs[2])).getMonthValue();
	}
	/**
	 * 获取月份
	 * @return
	 */
	public static int getMonth(){
		return getMonth(System.currentTimeMillis());
	}
	/**
	 * 获取月份的第几天
	 * @param time
	 * @return
	 */
	public static int getDay(long time){
		String[] strs = format(DATE_FORMAT_1,time).split("-");
		return LocalDate.of(Integer.valueOf(strs[0]), Integer.valueOf(strs[1]), Integer.valueOf(strs[2])).getDayOfMonth();
	}
	/**
	 * 获取月份的第几天
	 * @return
	 */
	public static int getDay(){
		return getDay(System.currentTimeMillis());
	}
	/**
	 * 比较两个时间是否同一天
	 * @param time1
	 * @param time2
	 * @return
	 */
	public static boolean isSameDay(long time1,long time2){
		return getZero(time1) == getZero(time2);
	}
	
	/**
	 * 比较两个时间是否同一月份
	 * @param time1
	 * @param time2
	 * @return
	 */
	public static boolean isSameMonth(long time1,long time2){
		String[] strs1 = format(DATE_FORMAT_1,time1).split("-");
		String[] strs2 = format(DATE_FORMAT_1,time2).split("-");
		if(!strs1[0].equals(strs2[0])){
			return false;
		}
		return strs1[1].equals(strs2[1]);
	}
	/**
	 * 比较两个时间是否同一年
	 * @param time1
	 * @param time2
	 * @return
	 */
	public static boolean isSameYear(long time1,long time2){
		String[] strs1 = format(DATE_FORMAT_1,time1).split("-");
		String[] strs2 = format(DATE_FORMAT_1,time2).split("-");
		return strs1[0].equals(strs2[0]);
	}
	/** 获取今天的零点时间 */
	public static long getZero(){
		return getZero(System.currentTimeMillis());
	}
	
	/** 获取time那天的凌晨零点时间 */
	public static long getZero(long time){
		Calendar c = Calendar.getInstance();
		c.setTime(new Date(time));
		c.set(Calendar.HOUR_OF_DAY, 0);  
		c.set(Calendar.MINUTE, 0);  
		c.set(Calendar.SECOND, 0);  
		c.set(Calendar.MILLISECOND, 0);  
        return c.getTimeInMillis();
	}
	
	/**
	 * 获取传入那天的开始时间
	 * @param time
	 * @return
	 */
	public static long getDayStartTime(long time){
		return (long) getTodayStartAndEnd(time).get("start_time");
	}
	/**
	 * 获取传入那天的结束时间
	 * @param time
	 * @return
	 */
	public static long getDayEndTime(long time){
		return (long) getTodayStartAndEnd(time).get("end_time");
	}

	/**
	 * 获取一周的开始时间
	 * @param time
	 * @return
	 */
	public static long getWeekStartTime(long time) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(new Date(time));
		int dayofweek = cal.get(Calendar.DAY_OF_WEEK);
		if (dayofweek == 1) {
			dayofweek += 7;
		}
		cal.add(Calendar.DATE, 2 - dayofweek);
		return getDayStartTime(cal.getTimeInMillis());
	}
 
	/**
	 * 获取一周的结束时间
	 * @param time
	 * @return
	 */
	public static long getWeekEndTime(long time){
		Calendar cal = Calendar.getInstance();
		cal.setTime(new Date(getWeekStartTime(time)));  
		cal.add(Calendar.DAY_OF_WEEK, 6); 
		return getDayEndTime(cal.getTimeInMillis());
	}
	/**
	 * 获取一年的开始时间
	 * @param time
	 * @return
	 */
	public static long getYearStartTime(long time){
		String[] strs = format(DATE_FORMAT_1,time).split("-");
		int start = Integer.valueOf(strs[0])+1;
		String formart = start+"-01-01 00:00:00";
		return parse(formart);
	}
	/**
	 * 获取一年的结束时间
	 * @param time
	 * @return
	 */
	public static long getYearEndTime(long time){
		String[] strs = format(DATE_FORMAT_1,time).split("-");
		int start = Integer.valueOf(strs[0])+1;
		String formart = start+"-12-31 23:59:59";
		return parse(formart);
	}
	/**
	 * 获取月份的开始时间
	 * @param time
	 * @return
	 */
	public static long getMonthStartTime(long time) {
		Calendar calendar = Calendar.getInstance();
		calendar.set(getYear(time), getMonth(time) - 1, 1);
		return getDayStartTime(calendar.getTimeInMillis());
	}
 
	/**
	 * 获取月份的结束时间
	 * @param time
	 * @return
	 */
	public static long getMonthEndTime(long time) {
		Calendar calendar = Calendar.getInstance();
		calendar.set(getYear(time), getMonth(time) - 1, 1);
		int day = calendar.getActualMaximum(5);
		calendar.set(getYear(time), getMonth(time) - 1, day);
		return getDayEndTime(calendar.getTimeInMillis());
	}

	
	/**
	 * 获取传入时间的这一天的开始时间和结束时间
	 * (如何传入为null 获取今天的开始时间和结束时间)
	 * @param time 时间戳
	 * @return map(key start_time为开始时间 key end_time为结束时间)
	 */
	@SuppressWarnings("static-access")
	private static Map<String, Object> getTodayStartAndEnd(Long time){
//		if (time!=null && time>System.currentTimeMillis()) {
//			throw new RuntimeException("the param  must not greater than current time");
//		}
		Map<String, Object> map = new HashMap<String, Object>();
		if (time != null) {
			// 获取现在的时间
			Date date = new Date(time);
			Calendar now = Calendar.getInstance();
			now.setTime(date);
			
			// 获取昨天24:00
	        Calendar strat = now;   
	        strat.set(Calendar.HOUR_OF_DAY, 0);  
	        strat.set(Calendar.MINUTE, 0);  
	        strat.set(Calendar.SECOND, 0);  
	        strat.set(Calendar.MILLISECOND, 0);  
	        Long start_time=strat.getTimeInMillis();  
	        // 获取今天24:00
	        Calendar end = now;   
	        end.add(now.DATE,1);
	        end.set(Calendar.HOUR_OF_DAY, 0);  
	        end.set(Calendar.MINUTE, 0);  
	        end.set(Calendar.SECOND, 0);  
	        end.set(Calendar.MILLISECOND, 0);  
	        Long end_time=end.getTimeInMillis();  
	        map.put("start_time", start_time);
			map.put("end_time", end_time-1);
			return map;
		}
		Calendar calendar = Calendar.getInstance();
		// 获取昨天24:00
        Calendar strat = Calendar.getInstance();   
        strat.set(Calendar.HOUR_OF_DAY, 0);  
        strat.set(Calendar.MINUTE, 0);  
        strat.set(Calendar.SECOND, 0);  
        strat.set(Calendar.MILLISECOND, 0);  
        Long start_time=strat.getTimeInMillis();  
        // 获取今天24:00
        Calendar end = Calendar.getInstance();   
        end.add(calendar.DATE,1);
        end.set(Calendar.HOUR_OF_DAY, 0);  
        end.set(Calendar.MINUTE, 0);  
        end.set(Calendar.SECOND, 0);  
        end.set(Calendar.MILLISECOND, 0);  
        Long end_time=end.getTimeInMillis();  
        map.put("start_time", start_time);
		map.put("end_time", end_time);
        return map;
	}


	/**
	 * 取时间戳
	 *
	 * @param time
	 * @return
	 * @throws ParseException
	 */
	public static long parse(String time){
		try {
			return parse(DATE_FORMAT_4,time);
		} catch (Exception e) {
			return parse(DATE_FORMAT_1,time);
		}
	}
	/**
	 * 取时间戳
	 *
	 * @param time
	 * @return
	 * @throws ParseException
	 */
	public static long parse(SimpleDateFormat f, String time){
		try {
			return f.parse(time).getTime();
		} catch (ParseException e) {
			throw new RuntimeException(e);
		}
	}

	/**
	 * 取某几小时前(或后)的时间
	 * @param hour 小时数(正数为取后几小时,负数为取前小时)
	 * @return
	 */
	public static long sumHour(long time,int hour){
		return time+(1000*60*60*hour);
	}

	/**
	 * @param format 格式化对象
	 * @param time   时间
	 * @return 格式化后的日期
	 */
	public static String format(SimpleDateFormat format, long time) {
		return format.format(time);
	}
	/**
	 * 返回格式化后的日期(yyyy-MM-dd HH:mm:ss)
	 *
	 * @param format 格式化对象
	 * @param time   时间
	 * @return 格式化后的日期
	 */
	public static String format(long time){
		return DATE_FORMAT_4.format(time);
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值