例如在9月我需要:
1,8,15,22和29
由于
答案 0 :(得分:7)
查找Doomsday Rule - 您应该可以将该算法应用于您的问题。
答案 1 :(得分:4)
我能看到的最简单(天真)的解决方案是:
获取日历(Calendar.getInstance())
设置年,月,日等等(其他字段为零)。
然后迭代添加一个日期(如果你没有在正确的月份停止 - calendar.get(Calendar.MONTH))
迭代时,如果calendar.get(Calendar.DAY_OF_WEEK)== Calendar.TUESDAY则递增星期二计数器。
答案 2 :(得分:1)
根据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 );
}
}
}
答案 3 :(得分: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);
}