Java日期常用方法

Java日期常用方法

  1. 获取当前日期的上月最后一天
public static String getPreMonthLastDay(Date date, String format) {
        if(date == null) {
            return null;
        }
        if(format == null) {
            format = FORMAT_YYYY_MM_DD;
        }
        SimpleDateFormat dataFormat = new SimpleDateFormat(format);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MONTH, -1);
        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        Date time = calendar.getTime();
        return dataFormat.format(time);
}
  1. 获取某年第一天
public static String getYearFirst(int year, String format){
        SimpleDateFormat format = new SimpleDateFormat(format);
        Calendar currCal = Calendar.getInstance();
        currCal.clear();
        currCal.set(Calendar.YEAR, year);
        Date currYearFirst = currCal.getTime();
        return format.format(currYearFirst);
}
  1. 获取上月相同日期
public static String getLastMonthToday(String dateStr, String format) throws ParseException {
		Calendar calendar = Calendar.getInstance();
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		Date date = sdf.parse(dateStr);
		calendar.setTime(date);
		calendar.add(Calendar.MONTH, -1);
		return sdf.format(calendar.getTime());
}
  1. 获取上月第一天
public static String getLastMonthFirstDay(String dateStr, String format) throws ParseException {
		SimpleDateFormat dataFormat = new SimpleDateFormat(format);
		Date date = dataFormat.parse(dateStr);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MONTH, -1);
        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
        Date time = calendar.getTime();
        return dataFormat.format(time);
}
  1. 获取去年同期
public static String getLastYearMonth(String queryMonth,String formatStr) throws Exception{
	SimpleDateFormat format = new SimpleDateFormat(formatStr);
	Calendar c = Calendar.getInstance();
	c.setTime(format.parse(queryMonth));
	c.add(Calendar.YEAR, -1);
	Date y = c.getTime();
	return format.format(y);
}
  1. 计算两个日期相隔月份
/**
     * 计算两个日期的间隔月份数
     * @param start 开始日期
     * @param end 结束日期
     * @param format 日期格式
     * @return
     */
public static long getMonthDiff(String start, String end, String format) {
    LocalDate startDate = LocalDate.parse(start, DateTimeFormatter.ofPattern(format));
    LocalDate endDate = LocalDate.parse(end, DateTimeFormatter.ofPattern(format));
    long between = ChronoUnit.MONTHS.between(startDate, endDate);
    return between;
}
  1. 计算当前日期上一季度的结束时间
public static String getLastQuarter(String dateStr, String formatStr) throws Exception {
		SimpleDateFormat format = new SimpleDateFormat(formatStr);
		Date date = format.parse(dateStr);
        Calendar endCalendar = Calendar.getInstance();
        endCalendar.setTime(date);
        endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMinimum(Calendar.DAY_OF_MONTH));
        endCalendar.set(Calendar.MONTH, ((int) endCalendar.get(Calendar.MONTH) / 3 - 1) * 3 + 2);
        endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        endCalendar.set(Calendar.HOUR_OF_DAY, endCalendar.getActualMaximum(Calendar.HOUR_OF_DAY));
        endCalendar.set(Calendar.MINUTE, endCalendar.getActualMaximum(Calendar.MINUTE));
        endCalendar.set(Calendar.SECOND, endCalendar.getActualMaximum(Calendar.SECOND));
        endCalendar.set(Calendar.MILLISECOND, endCalendar.getActualMaximum(Calendar.MILLISECOND));
        return format.format(endCalendar.getTime());
    }
  1. 获取指定年月的最后一天
/**
     * 获取某月的最后一天
     * @param
     * @return
     */
    public static String getLastDayOfMonth(int year, int month, String pattern) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.MONTH, month-1);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        return sdf.format(calendar.getTime());
    }
  1. 计算两个日期的相隔天数
public static Long getDaysBetween(String start, String end, String pattern) {
	long betweenDate = 0;
	try {
	    SimpleDateFormat df = new SimpleDateFormat(pattern);
	    Date startDate = df.parse(start);
	    Date endDate = df.parse(end);
	    betweenDate = (endDate.getTime() - startDate.getTime()) / (24 * 60 * 60 * 1000);
	} catch (Exception e) {
	    e.printStackTrace();
	}
	return betweenDate;
}
  1. 获取上季度的最后一月同期
public static String getPreQuarterToday(String dateStr, String format) throws Exception {
	Calendar calendar = Calendar.getInstance();
	SimpleDateFormat sdf = new SimpleDateFormat(format);
	Date date = sdf.parse(dateStr);
	calendar.setTime(date);
	int subMonth = ((int) calendar.get(Calendar.MONTH) / 3 - 1) * 3 + 2;
	calendar.add(Calendar.MONTH, -Math.abs(calendar.get(Calendar.MONTH) - subMonth));
	return sdf.format(calendar.getTime());
}
  1. 计算上季度同期
public static String getPreQuarterToday(String dateStr, String format) throws Exception {
   	Calendar calendar = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat(format);
    Date date = sdf.parse(dateStr);
    calendar.setTime(date);
    calendar.add(Calendar.MONTH, -3);
    return sdf.format(calendar.getTime());
}
  1. 获取当前季度第一天
/**
 * 获取当前季度第一天
 */
public static String getCurQuarterFirstDay(String dateStr, String format) throws ParseException {
    Calendar calendar = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat(format);
    Date date = sdf.parse(dateStr);
    calendar.setTime(date);
    int month = calendar.get(Calendar.MONTH) + 1;
    int quarter = (month - 1) / 3 + 1;
    calendar.set(Calendar.MONTH, (quarter - 1) * 3);
    calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
    return sdf.format(calendar.getTime());
}
  1. 获取当前季度最后一天
/**
  * 获取当前季度最后一天
  */
 public static String getCurQuarterLastDay(String dateStr, String format) throws ParseException {
     Calendar calendar = Calendar.getInstance();
     SimpleDateFormat sdf = new SimpleDateFormat(format);
     Date date = sdf.parse(dateStr);
     calendar.setTime(date);
     int month = calendar.get(Calendar.MONTH) + 1;
     int quarter = (month - 1) / 3 + 1;
     calendar.set(Calendar.MONTH, quarter * 3 - 1);
     calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
     return sdf.format(calendar.getTime());
 }
  1. 获取指定日期的周一与周日日期
public static List<String> getWeekDate(String date, String format) throws ParseException {
	SimpleDateFormat sdf = new SimpleDateFormat(format);
	Calendar cal = Calendar.getInstance();
	cal.setTime(sdf.parse(date));
	cal.setFirstDayOfWeek(Calendar.MONDAY);
	int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
    if(dayWeek==1){
    	dayWeek = 8;
    }
    cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - dayWeek);
    Date mondayDate = cal.getTime();
    String weekBegin = sdf.format(mondayDate);
 
    cal.add(Calendar.DATE, 4 +cal.getFirstDayOfWeek());
    Date sundayDate = cal.getTime();
    String weekEnd = sdf.format(sundayDate);
	return Arrays.asList(weekBegin, weekEnd);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值