在java中查找两个给定日期之间的所有月份名称

JDG*_*ide 10 java

我需要两个给定日期之间的所有月/年名称.我需要这个仅仅放在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
Run Code Online (Sandbox Code Playgroud)

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

Den*_*ret 10

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

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

  • 我想你应该解决它.这并不难.你的名字是JDeveloper! (2认同)

Eug*_*ene 10

使用Joda-Time(因为没有指定,我假设您至少可以查看joda时间):

 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));
 }
Run Code Online (Sandbox Code Playgroud)


Ole*_*.V. 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));
    }
Run Code Online (Sandbox Code Playgroud)

打印:

Dec/2011
Jan/2012
Feb/2012
Mar/2012
Apr/2012
May/2012
Jun/2012
Jul/2012
Aug/2012
Run Code Online (Sandbox Code Playgroud)

请为第二个电话提供适当的语言环境,DateTimeFormatter.ofPattern()以获取您所用语言的月份名称。而且第一个电话也要安全。