java 计算两个时间相差几天,获取某天当月的第一天,最后一天

通过jdk8可以使用:

// 取本月第1天:
LocalDate firstDayOfThisMonth = today.with(TemporalAdjusters.firstDayOfMonth()); // 2017-03-01
// 取本月第2天:
LocalDate secondDayOfThisMonth = today.withDayOfMonth(2); // 2017-03-02
// 取本月最后一天,再也不用计算是28,29,30还是31:
LocalDate lastDayOfThisMonth = today.with(TemporalAdjusters.lastDayOfMonth()); // 2017-12-31
// 取下一天:
LocalDate firstDayOf2015 = lastDayOfThisMonth.plusDays(1); // 变成了2018-01-01
// 取2017年1月第一个周一,用Calendar要死掉很多脑细胞:
LocalDate firstMondayOf2015 = LocalDate.parse("2017-01-01").with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)); // 2017-01-02

/**
     * 获取两个时间之间的没有最后一天
     * 
     * @param startDate
     * @param endDate
     * @return
     */
    public static List<String> getDayList(Date startDate, Date endDate) {
        if (startDate == null) {
            startDate = new Date();
        }
        if (endDate == null) {
            endDate = new Date();
        }

        List<String> dataList = new ArrayList<>();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDate start = LocalDate.parse(format.format(startDate), df);
        LocalDate end = LocalDate.parse(format.format(endDate), df);
        while (true) {
            if (start.isAfter(end)) {
                break;
            }
            dataList.add(df.format(start.with(TemporalAdjusters.lastDayOfMonth())));
            int tmpYear = start.getYear();
            int tmpMonth = start.getMonthValue() + 1;
            if (end.getYear() == tmpYear && tmpMonth == end.getMonthValue()) {

            }
            int tmpDay = 1;
            start = LocalDate.of(tmpYear, tmpMonth, tmpDay);
        }
        return dataList;
    }

 

/**

* @Deprecated 计算两天相差几天
* @param day1较后
* @param day2较早
* @return
*/
private int numDays(String day1, String day2) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date1 = format.parse(day1);
Date date2 = format.parse(day2);
return (int) ((date1.getTime() - date2.getTime()) / (1000 * 3600 * 24));
} catch (ParseException e) {
this.logger.error("numDays计算相隔几天错误" + day1 + "\t" + day2);
return 0;
}

}

 

// 获取某天的前几天

public String getSpecifiedDayBefore(String specifiedDay, int days) {

Calendar c = Calendar.getInstance();
Date date = null;
try {
date = new SimpleDateFormat("yy-MM-dd").parse(specifiedDay);
} catch (ParseException e) {
e.printStackTrace();
}
c.setTime(date);
int day = c.get(Calendar.DATE);
c.set(Calendar.DATE, day - days);


String dayBefore = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
return dayBefore;
}

// 获取某天的后几天
public String getSpecifiedDayAfter(String specifiedDay, int days) {
Calendar c = Calendar.getInstance();
Date date = null;
try {
date = new SimpleDateFormat("yy-MM-dd").parse(specifiedDay);
} catch (ParseException e) {
e.printStackTrace();
}
c.setTime(date);
int day = c.get(Calendar.DATE);
c.set(Calendar.DATE, day + days);


String dayAfter = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
return dayAfter;
}

// 获取当月第一天,最后一天
public String[] getFirstLastDay(String time) {
if (StringUtil.isNullOrEmpty(time)) {
time = DateUtil.getCurDate();
}
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
try {
calendar.setTime(format.parse(time));
} catch (ParseException e) {
}
calendar.set(Calendar.DAY_OF_MONTH, 1);
Date firstDayOfMonth = calendar.getTime();
calendar.add(Calendar.MONTH, 1);
calendar.add(Calendar.DAY_OF_MONTH, -1);
Date lastDayOfMonth = calendar.getTime();
String[] fristLast = new String[] { format.format(firstDayOfMonth), format.format(lastDayOfMonth) };
return fristLast;
}

 

 

// 某天的前几天

public static String getBeforDays(Date date, int days) {
long beforeTime = (date.getTime() / 1000) - 60 * 60 * 24 * days;
Date nextYear = new Date();
nextYear.setTime(beforeTime * 1000);
return DateUtil.formatDate(nextYear);
}
 

// 某天的后几天
public static String getAfterDays(Date date, int days) {
long beforeTime = (date.getTime() / 1000) + 60 * 60 * 24 * days;
Date nextYear = new Date();
nextYear.setTime(beforeTime * 1000);
return DateUtil.formatDate(nextYear);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值