JAVA获取当日期前/后某个月的所有日期

 /**
     * 获取当日期前/后某个月的所有日期  0表示当前月   负数表示前多少月  正数表示后多少月
     * @param month
     * @return
     */
    public static List<Date> getDayListOfMonth(Integer months){
         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        List<Date> list = new ArrayList<>();
        Calendar aCalendar = Calendar.getInstance(Locale.CHINA);
        aCalendar.set(aCalendar.MONTH, months+1);
        int year = aCalendar.get(Calendar.YEAR);//年份
        int month = aCalendar.get(Calendar.MONTH)+1;//月份
        int day = aCalendar.getActualMaximum(Calendar.DATE);
        for (int i = 1; i <= day; i++) {
            String aDate = String.valueOf(year)+"-"+month+"-"+i;
            Date parse = null;
                try {
                    parse = simpleDateFormat.parse(aDate);
                } catch (ParseException e) {
                    e.printStackTrace();
                }
            list.add(parse);
        }
        return list;
    }

获取两个日期间相差的天数

 /**
     * java获取两个日期之间相差的天数
     * @param date1
     * @param date2
     * @return
     */
    public static Integer getMonth(Date date1, Date date2){
         Calendar c1 = Calendar.getInstance();  
         Calendar c2 = Calendar.getInstance();  
         c1.setTime(date1);  
         c2.setTime(date2);  
         if(c1.getTimeInMillis() < c2.getTimeInMillis()) return 0;  
         int year1 = c1.get(Calendar.YEAR);  
         int year2 = c2.get(Calendar.YEAR);  
         int month1 = c1.get(Calendar.MONTH);  
         int month2 = c2.get(Calendar.MONTH);  
         int day1 = c1.get(Calendar.DAY_OF_MONTH);  
         int day2 = c2.get(Calendar.DAY_OF_MONTH);  
         // 获取年的差值 假设 date1 = 2015-8-16  date2 = 2011-9-30  
         int yearInterval = year1 - year2;  
         // 如果 d1的 月-日 小于 d2的 月-日 那么 yearInterval-- 这样就得到了相差的年数  
         if(month1 < month2 || month1 == month2 && day1 < day2) yearInterval --;  
         // 获取月数差值  
         int monthInterval =  (month1 + 12) - month2  ;  
         if(day1 < day2) monthInterval --;  
         monthInterval %= 12;  
         return yearInterval * 12 + monthInterval;  
    }
获取某个日期几个时间,可以使用`java.time`包中的`LocalDate`类和`YearMonth`类来进行计算。下面是一个示例代码: ```java import java.time.LocalDate; import java.time.YearMonth; public class Main { public static void main(String[] args) { LocalDate currentDate = LocalDate.now(); int monthsToSubtract = 3; LocalDate previousDate = currentDate.minusMonths(monthsToSubtract); YearMonth previousYearMonth = YearMonth.from(previousDate); System.out.println("Previous date: " + previousDate); System.out.println("Previous year and month: " + previousYearMonth); } } ``` 在上面的示例中,我们首先使用`LocalDate.now()`方法获取日期,并将其存储在`currentDate`变量中。然后,我们定义了一个整数变量`monthsToSubtract`,表示要向减去的份数。 接下来,我们使用`currentDate.minusMonths(monthsToSubtract)`方法从当日期中减去指定份数,得到几个日期,并将其存储在`previousDate`变量中。 然后,我们使用`YearMonth.from(previousDate)`方法将`previousDate`转换为`YearMonth`对象,并将其存储在`previousYearMonth`变量中。这样可以得到几个的年份和份。 最后,我们将几个日期和年份/份打印出来。 请注意,这里的计算是基于年份和份的差异,而不考虑具体的日期。如果需要考虑具体的日期差异,可以使用其他日期操作方法,如`minusDays()`、`minusWeeks()`等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值