11

我需要两个给定日期之间的所有月/年名称。我只需要在 java 上输出这个。

例子 :

Input Date:

    date 1- 20/12/2011 
    date 2- 22/08/2012

Now ,my expected result should be :- 

        Dec/2011
        Jan/2012
        Feb/2012
        Mar/2012
        Apr/2012
        May/2012
        Jun/2012
        Jul/2012
        Aug/2012

任何人都可以帮助我。提前致谢。

4

7 回答 7

11

使用 Joda-Time(由于未指定,我假设您至少可以看看 joda time 是什么):

 LocalDate date1 = new LocalDate("2011-12-12");
 LocalDate date2 = new LocalDate("2012-11-11"); 
 while(date1.isBefore(date2)){
     System.out.println(date1.toString("MMM/yyyy"));
     date1 = date1.plus(Period.months(1));
 }
于 2012-08-22T09:12:18.500 回答
10

您可以简单地使用Calendar 类并通过在每次迭代中添加一个月来从一个日期迭代到另一个日期using myCalendar.add(Calendar.MONTH, 1);

Calendar 类负责避免溢出并为您更新其他字段(此处为年份)。

于 2012-08-22T08:44:52.903 回答
5

java.time.YearMonth

虽然其他答案在编写时是很好的答案,但它们现在已经过时了。自从 Java 8 引入了这个YearMonth类,这个任务被大大简化了:

    String date1 = "20/12/2011";
    String date2 = "22/08/2012";

    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd/MM/uuuu", Locale.ROOT);
    DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("MMM/uuuu", Locale.ROOT);
    YearMonth endMonth = YearMonth.parse(date2, dateFormatter);
    for (YearMonth month = YearMonth.parse(date1, dateFormatter);
            ! month.isAfter(endMonth);
            month = month.plusMonths(1)) {
        System.out.println(month.format(monthFormatter));
    }

这打印:

Dec/2011
Jan/2012
Feb/2012
Mar/2012
Apr/2012
May/2012
Jun/2012
Jul/2012
Aug/2012

请为第二次调用提供适当的语言环境,以DateTimeFormatter.ofPattern()使用您的语言获取月份名称。第一个电话也是为了安全起见。

于 2017-03-04T12:57:05.280 回答
4

根据上面的对话。使用 Calendar 和 add 方法。

我没有测试过这个,但它就在那里:

public static List<Date> datesBetween(Date d1, Date d2) {
    List<Date> ret = new ArrayList<Date>();
    Calendar c = Calendar.getInstance();
    c.setTime(d1);
    while (c.getTimeInMillis()<d2.getTime()) {
        c.add(Calendar.MONTH, 1);
        ret.add(c.getTime());
    }
    return ret;
}
于 2012-08-22T08:59:45.073 回答
1

做这个

 Calendar cal = Calendar.getInstance();
 cal.setTime(your_date_object);
 cal.add(Calendar.MONTH, 1);
于 2012-08-22T09:01:10.337 回答
0

所以假设你有这两个日期。您可以通过迭代一个while循环来轻松比较它,直到fromDate在toDate之前。

Date fromDate= new Date("1/4/2016");
Date toDate = new Date("31/12/2016");

int i=0;
while(fromDate.before(toDate)){
    i=i+1;
    fromDate.setMonth(i);
    System.out.println(fromDate);
}

您可以在列表中添加日期或做任何想做的事!!!

于 2017-04-14T06:58:48.040 回答
0
于 2018-09-21T03:53:16.810 回答