DateUtil

/**
 * 获取日期中的某数值。如获取月份
 *
 * @param date     日期
 * @param dateType 日期格式
 * @return 数值
 */
private static int getInteger(Date date, int dateType) {
    int num = 0;
    Calendar calendar = Calendar.getInstance();
    if (date != null) {
        calendar.setTime(date);
        num = calendar.get(dateType);
    }
    return num;
}


/**
 * 增加日期中某类型的某数值。如增加日期
 *
 * @param date     日期
 * @param dateType 类型
 * @param amount   数值
 * @return 计算后日期
 */
public static Date addInteger(Date date, int dateType, int amount) {
    Date myDate = null;
    if (date != null) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(dateType, amount);
        myDate = calendar.getTime();
    }
    return myDate;
}


/**
 * 增加日期的年份。失败返回null。
 *
 * @param date       日期
 * @param yearAmount 增加数量。可为负数
 * @return 增加年份后的日期
 */
public static Date addYear(Date date, int yearAmount) {
    return addInteger(date, Calendar.YEAR, yearAmount);
}


/**
 * 增加日期的月份。失败返回null。
 *
 * @param date        日期
 * @param monthAmount 增加数量。可为负数
 * @return 增加月份后的日期
 */
public static Date addMonth(Date date, int monthAmount) {
    return addInteger(date, Calendar.MONTH, monthAmount);
}


/**
 * 增加日期的天数。失败返回null。
 *
 * @param date      日期
 * @param dayAmount 增加数量。可为负数
 * @return 增加天数后的日期
 */
public static Date addDay(Date date, int dayAmount) {
    return addInteger(date, Calendar.DATE, dayAmount);
}


/**
 * 增加日期的小时。失败返回null。
 *
 * @param date       日期
 * @param hourAmount 增加数量。可为负数
 * @return 增加小时后的日期
 */
public static Date addHour(Date date, int hourAmount) {
    return addInteger(date, Calendar.HOUR_OF_DAY, hourAmount);
}


/**
 * 增加日期的分钟。失败返回null。
 *
 * @param date         日期
 * @param minuteAmount 增加数量。可为负数
 * @return 增加分钟后的日期
 */
public static Date addMinute(Date date, int minuteAmount) {
    return addInteger(date, Calendar.MINUTE, minuteAmount);
}


/**
 * 增加日期的秒钟。失败返回null。
 *
 * @param date         日期
 * @param secondAmount 增加数量。可为负数
 * @return 增加秒钟后的日期
 */
public static Date addSecond(Date date, int secondAmount) {
    return addInteger(date, Calendar.SECOND, secondAmount);
}


/**
 * 获取日期的年份。失败返回0。
 *
 * @param date 日期
 * @return 年份
 */
public static int getYear(Date date) {
    return getInteger(date, Calendar.YEAR);
}


/**
 * 获取日期的月份。失败返回0。
 *
 * @param date 日期
 * @return 月份
 */
public static int getMonth(Date date) {
    return getInteger(date, Calendar.MONTH) + 1;
}


/**
 * 获取日期的天数。失败返回0。
 *
 * @param date 日期
 * @return 天
 */
public static int getDay(Date date) {
    return getInteger(date, Calendar.DATE);

}

/**
 * 根据日期获取相差天数
 *
 * @param start
 * @param end
 * @return
 */
public static int getDayBetweenDayNot(Date start, Date end) {
    long diff = end.getTime() - start.getTime();
    long bet = TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS);
    if (bet > Integer.MAX_VALUE) {
        throw new IllegalArgumentException("between days overflow");
    }
    return (int) bet;
}


/**
 * 根据日期获取相差天数
 *
 * @param start yyyyMMdd
 * @param end   yyyyMMdd
 * @return
 */
public static int getDayBetweenDays(Date start, Date end) {
    long diff = end.getTime() - start.getTime();
    long bet = TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS);
    if (bet > Integer.MAX_VALUE) {
        throw new IllegalArgumentException("between days overflow");
    }
    return (int) bet + 1;
}

/**
 * 获取日期的小时。失败返回0。
 *
 * @param date 日期
 * @return 小时
 */
public static int getHour(Date date) {
    return getInteger(date, Calendar.HOUR_OF_DAY);
}


/**
 * 获取日期的分钟。失败返回0。
 *
 * @param date 日期
 * @return 分钟
 */
public static int getMinute(Date date) {
    return getInteger(date, Calendar.MINUTE);
}


/**
 * 获取日期的秒钟。失败返回0。
 *
 * @param date 日期
 * @return 秒钟
 */
public static int getSecond(Date date) {
    return getInteger(date, Calendar.SECOND);
}

/**
 * 获取距离当天 23.59.59,剩余的秒时间。
 *
 * @return 秒钟
 */
public static Long getTimeRemaining() {
    /**
     * 当前时间毫秒数
     */
    long current = System.currentTimeMillis();
    /**
     * 今天零点零分零秒的毫秒数
     */
    long zero = current / (1000 * 3600 * 24) * (1000 * 3600 * 24) - TimeZone.getDefault().getRawOffset();
    /**
     * 今天23点59分59秒的毫秒数
     */
    long twelve = zero + 24 * 60 * 60 * 1000 - 1;

    return (twelve - current) / 1000;
}

public static List<Date> getDateList(Date deliveryStDt, Date deliveryEdDt) {
    List<Date> list = new ArrayList<>();
    list.add(deliveryStDt);
    while (true) {
        Date date = addDay(deliveryStDt, 1);
        // <
        if (date != null && date.before(deliveryEdDt)) {
            list.add(deliveryStDt);
        }
        break;
    }
    return list;
}

/**
 * 当前月最后一天
 *
 * @return
 */
public static String lastdate() {
    Calendar cale = Calendar.getInstance();
    SimpleDateFormat format = new SimpleDateFormat(DATE_FORMAT_SIX);
    cale.add(Calendar.MONTH, 1);
    cale.set(Calendar.DAY_OF_MONTH, 0);
    return format.format(cale.getTime());
}

/**
 * 当前月第一天
 *
 * @return
 */
public static String firstdate() {
    Calendar cale = Calendar.getInstance();
    SimpleDateFormat format = new SimpleDateFormat(DATE_FORMAT_SIX);
    // 获取当前月的第一天
    cale.add(Calendar.MONTH, 0);
    cale.set(Calendar.DAY_OF_MONTH, 1);
    return format.format(cale.getTime());
}

/**
 * 当前年月
 *
 * @return
 */
public static String currentdate() {
    SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月");
    return format.format(new Date());
}

/**
 * 当前系统日期T1所在月的下一月的第5日
 *
 * @return
 */
public static Date nextdate() {
    Calendar calendar = Calendar.getInstance();
    calendar.add(Calendar.MONTH, 1);
    calendar.set(Calendar.DAY_OF_MONTH, 5);
    return calendar.getTime();
}

/**
 * 当前系统日期T1所在月的下一月的最后一日
 *
 * @return
 */
public static Date nextlastdate() {
    Calendar calendar = Calendar.getInstance();
    calendar.add(Calendar.MONTH, 2);
    calendar.set(Calendar.DAY_OF_MONTH, 0);
    return calendar.getTime();
}

/**
 * 获得日期的开始时间,即2012-01-01 00:00:00
 *
 * @return
 */
public static Date getDayStartTime(Date date) {
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    c.set(Calendar.HOUR_OF_DAY, 0);
    c.set(Calendar.MINUTE, 0);
    c.set(Calendar.SECOND, 0);
    c.set(Calendar.MILLISECOND, 0);
    return c.getTime();
}

/**
 * 获得日期的结束时间,即2012-01-01 23:59:59
 *
 * @return
 */
public static Date getDayEndTime(Date date) {
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    c.set(Calendar.HOUR_OF_DAY, 23);
    c.set(Calendar.MINUTE, 59);
    c.set(Calendar.SECOND, 59);
    return c.getTime();
}


/**
 * 当前系统日期T1所在日初始时间 2020-05-06
 *
 * @return
 */
public static Date initDate() {
    Calendar calendar = Calendar.getInstance();
    int year = calendar.get(Calendar.YEAR);
    int month = calendar.get(Calendar.MONTH);
    int day = calendar.get(Calendar.DAY_OF_MONTH);
    calendar.clear();
    calendar.set(year, month, day);
    return calendar.getTime();
}


/**
 * 获得本周的第一天,周一
 *
 * @return
 */
public static Date getCurrentWeekDayStartTime() {
    SimpleDateFormat longSdf = new SimpleDateFormat(DATE_FORMAT_FOUR);
    SimpleDateFormat shortSdf = new SimpleDateFormat(DATE_FORMAT_SIX);
    Calendar c = Calendar.getInstance();
    try {
        int weekday = c.get(Calendar.DAY_OF_WEEK) - 2;
        c.add(Calendar.DATE, -weekday);
        c.setTime(longSdf.parse(shortSdf.format(c.getTime()) + " 00:00:00"));
    } catch (Exception e) {
        log.error("getCurrentWeekDayStartTime异常{}", e.toString());
    }
    return c.getTime();
}

/**
 * 获得本周的最后一天,周日
 *
 * @return
 */
public static Date getCurrentWeekDayEndTime() {
    SimpleDateFormat longSdf = new SimpleDateFormat(DATE_FORMAT_FOUR);
    SimpleDateFormat shortSdf = new SimpleDateFormat(DATE_FORMAT_SIX);
    Calendar c = Calendar.getInstance();
    try {
        int weekday = c.get(Calendar.DAY_OF_WEEK);
        c.add(Calendar.DATE, 8 - weekday);
        c.setTime(longSdf.parse(shortSdf.format(c.getTime()) + " 23:59:59"));
    } catch (Exception e) {
        log.error("getCurrentWeekDayEndTime异常{}", e.toString());
    }
    return c.getTime();
}

/**
 * 获得本月的开始时间
 *
 * @return
 */
public static Date getCurrentMonthStartTime() {
    SimpleDateFormat shortSdf = new SimpleDateFormat(DATE_FORMAT_SIX);
    Calendar c = Calendar.getInstance();
    Date now = null;
    try {
        c.set(Calendar.DATE, 1);
        now = shortSdf.parse(shortSdf.format(c.getTime()));
    } catch (Exception e) {
        log.error("getCurrentMonthStartTime异常{}", e.toString());
    }
    return now;
}

/**
 * 本月的结束时间
 *
 * @return
 */
public static Date getCurrentMonthEndTime() {
    SimpleDateFormat longSdf = new SimpleDateFormat(DATE_FORMAT_FOUR);
    SimpleDateFormat shortSdf = new SimpleDateFormat(DATE_FORMAT_SIX);
    Calendar c = Calendar.getInstance();
    Date now = null;
    try {
        c.set(Calendar.DATE, 1);
        c.add(Calendar.MONTH, 1);
        c.add(Calendar.DATE, -1);
        now = longSdf.parse(shortSdf.format(c.getTime()) + " 23:59:59");
    } catch (Exception e) {
        log.error("getCurrentMonthEndTime异常{}", e.toString());
    }
    return now;
}

public static Long getCurrentDateCounter(Date date) {
    if (date == null) {
        return 0L;
    }
    return (date.getTime() - System.currentTimeMillis()) / 1000;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值