2009-09-23 51 views

回答

3

最简单的(幼稚)解决方案,我可以看到的是:

获取日历(Calendar.getInstance())

设置年份,月份,日期等(归零等领域)。

然后遍历加一的日期(停止,如果你在正确的月份是不是 - calendar.get(的Calendar.MONTH))

而迭代,如果calendar.get(Calendar.DAY_OF_WEEK)== Calendar.TUESDAY然后递增星期二计数器。

+0

那么我不会增加计数器,而是将它添加到列表或其他东西。我编写了你的​​算法并运行正常。谢谢 – OscarRyz 2009-09-24 00:17:54

+0

你真的需要堆栈溢出来提出*那*解决方案?你在开玩笑吧? – Bombe 2009-09-24 06:05:24

7

中查找Doomsday Rule - 你应该能够到该算法适用于您的问题。

+0

优秀......多年之前我遇到过这个算法,但不知道它是什么,所以我找不到它。 – 2009-09-24 00:37:15

+0

如果这个计算需要做很多工作,那么Doomsday算法可能会快很多。 – jnylen 2009-09-24 02:00:10

0

按daveb答案我有:

import java.util.Calendar; 
import static java.util.Calendar.*; 

public class DiasDelMes { 

    public static void main(String [] args) { 

     Calendar calendar = getInstance(); 

     calendar.set(DAY_OF_MONTH, 1 ); 

     int month = calendar.get(MONTH); 

     while(calendar.get(MONTH) == month) { 

      if(calendar.get(DAY_OF_WEEK) == TUESDAY) { 
       System.out.println(calendar.get(DAY_OF_MONTH)) ; 
      } 

      calendar.add(DAY_OF_MONTH , 1); 
     } 
    } 
} 
0

我一直在寻找的答案,但要解决它在Java中这样的问题8.

这里是我的解决方案:

public Stream<Temporal> listAllDaysInMonthIterative(Month month, DayOfWeek dow) { 
    List<Temporal> dates = new ArrayList<>(); 
    LocalDate date = LocalDate.of(Year.now().getValue(), month.getValue(), 1); 

    TemporalAdjuster adjuster = TemporalAdjusters.nextOrSame(dow); 

    while (date.with(adjuster).get(ChronoField.MONTH_OF_YEAR) == month.getValue()) { 
     date = date.with(adjuster); 
     dates.add(date); 
     adjuster = TemporalAdjusters.next(dow); 
    } 

    return dates.stream(); 
} 

运行:

@Test 
public void testMondaysInMonth() { 

    MonthLengthReporter reporter = new MonthLengthReporter(); 
    Stream days = reporter.listAllDaysInMonthIterative(Month.MARCH, DayOfWeek.MONDAY); 

    days.forEach(System.out::println); 

} 
相关问题