java时间工具类

/**
 * 时间工具类
 *
 */
public final class DateUtils {

    private DateUtils() {

    }

    public static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";

    public static final String DATE_TIME_FORMAT_PURE = "yyyyMMddHHmmss";

    public static final String DATE_TIME_FORMAT_NYR = "yyyy年MM月dd日";

    public static final String DATE_TIME_FORMAT1 = "yyyy-MM-dd HH:mm";

    public static final String DATE_FORMAT = "yyyy-MM-dd";

    public static final String TIME_FORMAT = "HH:mm:ss";

    public static final String YYYYMM_FORMAT = "yyyyMM";

    public static final String YYYYMMDD_FORMAT = "yyyyMMdd";

    public static final String YYMMDD_FORMAT = "yyMMdd";

    public static final String YYMM_FORMAT = "yyMM";

    public static final String D_FORMAT = "d";

    public static final String H = "H";

    public static final Integer ONE_DAY_MILLISECONDS = 1000 * 60 * 60 * 24;

    public static final Integer ONE_HOUR_MILLISECONDS = 1000 * 60 * 60;
    public static final Long ONE_HOUR_MILLISECONDSL = 1000 * 60 * 60L;

    public static final Long ONE_DAY_MILLISECONDSL = 1000 * 60 * 60 * 24L;

    public static final Integer ONE_DAY_MILLISECONDS_END = ONE_DAY_MILLISECONDS - 1;

    public static final Integer TWENTY_THREE = 23;

    public static final Integer FIFTY_NINE = 59;

    public static final Integer ONE_MILLISECONDS_END = 999;

    /**
     * 根据给定时间获取当天的开始时间
     *
     * @param date 时间戳
     * @return 时间戳
     */
    public static Long getStartTimeOfDay(Long date) {
        if (date != null) {
            Calendar day = Calendar.getInstance();
            day.setTimeInMillis(date);
            day.set(Calendar.HOUR_OF_DAY, 0);
            day.set(Calendar.MINUTE, 0);
            day.set(Calendar.SECOND, 0);
            day.set(Calendar.MILLISECOND, 0);
            return day.getTimeInMillis();
        } else {
            return null;
        }
    }

    /**
     * 根据给定时间获取当天的结束时间
     *
     * @param date date
     * @return Long
     */
    public static Long getEndTimeOfDay(Long date) {
        if (date != null) {
            Calendar day = Calendar.getInstance();
            day.setTimeInMillis(date);
            day.set(Calendar.HOUR_OF_DAY, TWENTY_THREE);
            day.set(Calendar.MINUTE, FIFTY_NINE);
            day.set(Calendar.SECOND, FIFTY_NINE);
            day.set(Calendar.MILLISECOND, ONE_MILLISECONDS_END);
            return day.getTimeInMillis();
        } else {
            return null;
        }
    }

    /**
     * 获取本年度第一天
     */
    public static Long getYearFirst(Long date){
        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        calendar.set(Calendar.YEAR, getYear(date));
        Long currYearFirst = calendar.getTimeInMillis();
        return currYearFirst;

    }

    /**
     * 获取本年度最后一天
     */
    public static Long getYearEnd(Long date) {
        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        calendar.set(Calendar.YEAR, getYear(date));
        calendar.set(Calendar.MONTH, 11);//月份减一
        calendar.set(Calendar.DAY_OF_MONTH, 31);
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 999);
        return calendar.getTimeInMillis();
    }


    /**
     * 获取日期所在月份的第一天
     *
     * @param date date
     * @return Long
     */
    public static Long getStartDayOfMonth(Long date) {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, getYear(date));
        cal.set(Calendar.MONTH, getMonth(date));
        cal.set(Calendar.DAY_OF_MONTH, 1);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTimeInMillis();
    }

    /**
     * 获取日期所在月份的最后一天
     *
     * @param date date
     * @return Long
     */
    public static Long getLastDayOfMonth(Long date) {
        Calendar cal = Calendar.getInstance();
        cal.setTimeInMillis(date);
        int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
        cal.set(Calendar.DAY_OF_MONTH, lastDay);
        cal.set(Calendar.HOUR_OF_DAY, TWENTY_THREE);
        cal.set(Calendar.MINUTE, FIFTY_NINE);
        cal.set(Calendar.SECOND, FIFTY_NINE);
        cal.set(Calendar.MILLISECOND, ONE_MILLISECONDS_END);
        return cal.getTimeInMillis();
    }

    /**
     * 根据给定时间获取日期在本月的第几天
     *
     * @param date
     * @return
     */
    public static int getDay(Long date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(date);
        return calendar.get(Calendar.DAY_OF_MONTH);
    }

    /**
     * 根据给定时间获取日期在的月份
     *
     * @param date date
     * @return int
     */
    public static int getMonth(Long date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(date);
        return calendar.get(Calendar.MONTH);
    }

    /**
     * 根据给定的时间获取日期所在的年份
     *
     * @param date date
     * @return int
     */
    public static int getYear(Long date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(date);
        return calendar.get(Calendar.YEAR);
    }

    /**
     * 根据给定的时间获取年月日时分秒
     *
     * @param date 日期
     * @return 年月日时分秒
     */
    public static String getDateTime(Date date) {
        SimpleDateFormat df = new SimpleDateFormat(DATE_TIME_FORMAT_PURE);
        return df.format(date);
    }


    public static String getDateTimeFormat(Long date) {
        SimpleDateFormat df = new SimpleDateFormat(DATE_TIME_FORMAT);
        return df.format(date);
    }

    /**
     * 根据给定的时间获取年月日
     *
     * @param date 日期
     * @return 年月日时分秒
     */
    public static String getDayDateTime(Long date) {
        SimpleDateFormat df = new SimpleDateFormat(YYYYMMDD_FORMAT);
        return df.format(date);
    }

    public static String getDayDateTimeYYMMDD(Long date) {
        SimpleDateFormat df = new SimpleDateFormat(YYMMDD_FORMAT);
        return df.format(date);
    }

    /**
     * 根据给定的时间,格式获取时间
     *
     * @param time 日期
     * @return
     */
    public static String stampToDate(Long time, String format) {
        SimpleDateFormat df = new SimpleDateFormat(format);
        return df.format(time);
    }

    /**
     * @param dateStr 时间
     * @param format  格式
     * @return Long 时间戳
     * @MethodName dateToStamp
     * @Description 日期转换成时间戳
     */
    public static Long dateToStamp(String dateStr, String format) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
        long ts = 0L;
        try {
            Date date = simpleDateFormat.parse(dateStr);
            ts = date.getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return ts;
    }

    /**
     * 判断两个日期相隔天数
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return Integer
     */
    public static Integer diffDays(Long startTime, Long endTime) {
        return (int) ((getStartTimeOfDay(endTime) - getStartTimeOfDay(startTime)) / ONE_DAY_MILLISECONDS);
    }

    /**
     * @param startTime 开始时间
     * @param endTime   结束时间 (可以为null)
     * @return 明天下午6:00--8:00 / 后天凌晨02:00
     * @MethodName timeSwitch
     * @Description 时间描述
     */
    public static String timeSwitch(Long startTime, Long endTime) {
        StringBuilder sb = new StringBuilder();
        Long nowTime = System.currentTimeMillis();
        Long dayStartTime = DateUtils.getStartTimeOfDay(nowTime);
        Long dayEndTime = DateUtils.getEndTimeOfDay(nowTime);
        if (startTime != null) {
            //日期
            //当天
            if (startTime >= dayStartTime && startTime <= dayEndTime) {
                sb.append("");
            } else if (startTime >= dayStartTime + DateUtils.ONE_DAY_MILLISECONDSL && startTime <= dayEndTime + DateUtils.ONE_DAY_MILLISECONDSL) {
                sb.append("明天");
            } else if (startTime >= dayStartTime + DateUtils.ONE_DAY_MILLISECONDSL * 2L && startTime <= dayEndTime + DateUtils.ONE_DAY_MILLISECONDSL * 2L) {
                sb.append("后天");
            } else {
                sb.append(DateUtils.getDay(startTime) + "日");
            }

            //时间段 凌晨 上午 下午
            Long dayStart1 = DateUtils.getStartTimeOfDay(startTime);
            int periodFlag = 0;
            if (startTime < dayStart1 + 21600000L) { // 今天6点前
                periodFlag = 1;
                sb.append("凌晨");
            } else if (startTime < dayStart1 + 43200000L) { // 今天12点前
                periodFlag = 2;
                sb.append("上午");
            } else {
                periodFlag = 3;
                sb.append("下午");
            }
            sb.append(getSpecificTime(startTime));
            //结束时间
            if (endTime != null) {
                Long dayStart2 = DateUtils.getStartTimeOfDay(startTime);
                sb.append("--");
                if (endTime < dayStart2 + 21600000L) { // 今天6点前
                    if (periodFlag != 1) {
                        sb.append("凌晨");
                    }
                } else if (endTime < dayStart2 + 43200000L) { // 今天12点前
                    if (periodFlag != 2) {
                        sb.append("上午");
                    }
                } else {
                    if (periodFlag != 1) {
                        sb.append("下午");
                    }
                }
                sb.append(getSpecificTime(endTime));
            }
        }
        return sb.toString();
    }

    //获取具体时间
    public static String getSpecificTime(Long time) {
        SimpleDateFormat sdf = new SimpleDateFormat("hh:mm", Locale.getDefault());
        return sdf.format(new Date(time));
    }


    /**
     * 获得当日的时间搓(yyMMdd)
     * 精确到日
     *
     * @return Integer
     */
    public static Integer getCodeDate() {
        return Integer.parseInt(DateFormatUtils.format(System.currentTimeMillis(), DateUtils.YYMMDD_FORMAT));
    }

    public static Integer getCodeDateYYYYMMDD() {
        return Integer.parseInt(DateFormatUtils.format(System.currentTimeMillis(), DateUtils.YYYYMMDD_FORMAT));
    }

    /**
     * 获得两个日期相差多少天
     * 精确到日
     *
     * @return Integer
     */
    public static Long getDiffDay(Long bigTime, Long smallTime) {
        return (bigTime - smallTime) / ONE_DAY_MILLISECONDS;
    }

}

/**
	 * 获取指定年、月份的最后一天
	 * @param year
	 * @param month
	 * @return
	 */
	public static Long getEndTimeOfMonth(Integer year,Integer month){
		Calendar cal = Calendar.getInstance();
		cal.clear();
		cal.set(Calendar.YEAR,year);
		cal.set(Calendar.MONTH,month);
		cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
		cal.set(Calendar.HOUR_OF_DAY, cal.getActualMaximum(Calendar.HOUR_OF_DAY));
		cal.set(Calendar.MINUTE, cal.getActualMaximum(Calendar.MINUTE));
		cal.set(Calendar.SECOND, cal.getActualMaximum(Calendar.SECOND));
		cal.set(Calendar.MILLISECOND, cal.getActualMaximum(Calendar.MILLISECOND));
		return cal.getTimeInMillis();
	}
	
	/**
	 * 获取指定年、月份的第一天
	 * @param year
	 * @param month
	 * @return
	 */
	public static Long getStartTimeOfMonth(Integer year,Integer month){
		Calendar cal = Calendar.getInstance();
		cal.clear();
		cal.set(Calendar.YEAR,year);
		cal.set(Calendar.MONTH,month);
		return cal.getTimeInMillis();
	}

    /**
	* @MethodName dayForWeek
	* @Description TODO  判断当前日期是星期几
	* @return
	*/
	public static String dayForWeek(String pTime){
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		Date tmpDate = null;
		try {
			tmpDate = format.parse(pTime);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		Calendar cal = Calendar.getInstance();
		String[] weekDays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
		try {
			cal.setTime(tmpDate);
		} catch (Exception e) {
			e.printStackTrace();
		}
		int w = cal.get(Calendar.DAY_OF_WEEK) - 1; // 指示一个星期中的某天。
		if (w < 0)
			w = 0;
		return weekDays[w];
	}

     /**
	 * 判断两个日期相隔天数
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	public static  Integer differentDaysByMillisecond(Long startTime,Long endTime){
		return  (int)((getStartTimeOfDay(endTime) - getStartTimeOfDay(startTime)) / ONE_DAY_MILLISECONDS);
	}

   /**
	* @MethodName 获取当年的总周数
	* @Description TODO
	* @Param
	* @return
	*/
	public static Integer getWeekCount(Long year) {
		Calendar calendar = Calendar.getInstance();
		calendar.set(Math.toIntExact(year), 2, 5);
		calendar.setFirstDayOfWeek(Calendar.MONDAY);//设置星期一为一周开始的第一天
//        calendar.setTimeInMillis(time);//获得时间戳
		int weeksInWeekYear = calendar.getWeeksInWeekYear();
		return weeksInWeekYear;
	}

     /**
	 * 获取本周开始时间
	 * @param time
	 * @return
	 */
	public static Long getBeginTimeOfWeek(Long time) {
		Calendar cal = Calendar.getInstance();
		cal.setTimeInMillis(time);
		int dayofweek = cal.get(Calendar.DAY_OF_WEEK);
		if (dayofweek == 1) {
			dayofweek += 7;
		}
		cal.add(Calendar.DATE, 2 - dayofweek);
		return getStartTimeOfDay(cal.getTimeInMillis());
	}

    /**
	 * 获取上个月的最后一天0点0分0秒
	 * @return
	 */
	public static Long getLastMonthEndDay(){
		Calendar calendar = Calendar.getInstance();
		calendar.add(Calendar.MONTH, -1);
		calendar.set(Calendar.DAY_OF_MONTH,calendar.getActualMaximum(Calendar.DATE));
		calendar.set(Calendar.HOUR_OF_DAY, 0);
		calendar.set(Calendar.MINUTE, 0);
		calendar.set(Calendar.SECOND, 0);
		calendar.set(Calendar.MILLISECOND, 0);
		return calendar.getTimeInMillis();
	}

/**
	 * 获取上个月的0点0分0秒
	 * @return
	 */
	public static Long getLastMonthStartDay(){
		Calendar calendar = Calendar.getInstance();
		calendar.add(Calendar.MONTH, -1);
		calendar.set(Calendar.DAY_OF_MONTH,1);
		calendar.set(Calendar.HOUR_OF_DAY, 0);
		calendar.set(Calendar.MINUTE, 0);
		calendar.set(Calendar.SECOND, 0);
		calendar.set(Calendar.MILLISECOND, 0);
		return calendar.getTimeInMillis();
	}

/**
	 * 获取后天10:30的时间 _____最新需求 由 十点半改成10点
	 * @param date
	 * @return
	 */
	public static Long getAfterTwoDay1030AM(Long date){
		Calendar calendar = Calendar.getInstance();
		calendar.setTimeInMillis(getStartTimeOfDay(date));
		calendar.add(Calendar.DATE,2);
		calendar.add(Calendar.HOUR_OF_DAY,10);
//		calendar.add(Calendar.MINUTE,30);
		return calendar.getTimeInMillis();
	}
	/**
	 * 获取当天上午十点时间
	 * @param date
	 * @return
	 */
	public static Long get10AM(Long date){
		Calendar calendar = Calendar.getInstance();
		calendar.setTimeInMillis(getStartTimeOfDay(date));
		calendar.add(Calendar.DATE,0);
		calendar.add(Calendar.HOUR_OF_DAY,10);
		return calendar.getTimeInMillis();
	}

/**
	 * 获取第二天上午十点时间
	 * @param date
	 * @return
	 */
	public static Long getTomorrow10AM(Long date){
		Calendar calendar = Calendar.getInstance();
		calendar.setTimeInMillis(getStartTimeOfDay(date));
		calendar.add(Calendar.DATE,1);
		calendar.add(Calendar.HOUR_OF_DAY,10);
		return calendar.getTimeInMillis();
	}

/**
	 * 获取某时间段内的每个日期
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public static List<Long> getPeriodDates(long startDate, long endDate) {
		List<Long> date = new ArrayList<>();
		if (startDate > endDate) {
			return date;
		}
		Long start = getStartTimeOfDay(startDate);
		Long end = getStartTimeOfDay(endDate);
		date.add(start);
		if (start.equals(end)) {
			return date;
		}
		Calendar calendar = Calendar.getInstance();
		calendar.setTimeInMillis(start);
		for (;;) {
			calendar.add(Calendar.DATE, 1);
			start = calendar.getTimeInMillis();
			date.add(start);
			if (start.equals(end)) {
				break;
			}
		}
		return date;
	}
	
 /**
     * 获取去年的时间戳
     * @param date
     * @return
     */
    public static Long getLastYearTime(Long date){
        Calendar cal = Calendar.getInstance();
        cal.setTimeInMillis(date);
        cal.add(Calendar.YEAR, -1);
        return cal.getTimeInMillis();
    }
	/**
	 * 获取字符串时间
	 * @param format 时间格式
	 * @param date 时间戳
	 * @return
	 */
	public static String getStrDate(Long date, String format) {
		SimpleDateFormat df = new SimpleDateFormat(format);// 设置日期格式
		return df.format(date);
	}
 /**
     * 获取上周开始时间戳00:00:00
     *
     * @return
     */
    public static Long getStartWeek() {
        LocalDate d1 = LocalDate.now().minusWeeks(1).with(TemporalAdjusters.previous(DayOfWeek.SUNDAY)).plusDays(1L);
        return d1.atStartOfDay(ZoneOffset.ofHours(8)).toInstant().toEpochMilli();
    }

    /**
     * 获取上周结束时间戳23:59:59
     *
     * @return
     */
    public static Long getEndWeek() {
        LocalDate d2 = LocalDate.now().minusWeeks(1).with(TemporalAdjusters.next(DayOfWeek.MONDAY)).minusDays(1L);
        return getEndTimeOfDay(d2.atStartOfDay(ZoneOffset.ofHours(8)).toInstant().toEpochMilli());
    }
/**
*判断当日是不是周一
*
*/
public static boolean isMonday(long timestamp) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(timestamp);
        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
        return dayOfWeek == Calendar.MONDAY;
    }
/**
*判断当日是不是1号
*
*/
    public static boolean isFirstOfMonth(long timestamp) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(timestamp);
        int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
        return dayOfMonth == 1;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值