如何计算一个月中有多少个星期?

zxlwwiss  于 2021-07-09  发布在  Java
关注(0)|答案(3)|浏览(1031)

例如,我想找出一年中某个月有多少个星期一。是否有一个库可以用java导入特定年份的日历?

xghobddn

xghobddn1#

即使是旧日历´-api尽管有其所有的缺点,但它提供了一种解决方案:

  1. int year = 2017;
  2. int month = Calendar.JANUARY;
  3. int dow = Calendar.MONDAY;
  4. GregorianCalendar gcal = new GregorianCalendar(year, month, 1);
  5. while (gcal.get(Calendar.DAY_OF_WEEK) != dow) {
  6. gcal.add(Calendar.DAY_OF_MONTH, 1);
  7. }
  8. System.out.println(gcal.getActualMaximum(Calendar.DAY_OF_WEEK_IN_MONTH)); // 5

新的java-8-api在月域中没有周的日,但您可以这样做:

  1. int year = 2017;
  2. int month = 1;
  3. LocalDate ld1 =
  4. LocalDate.of(year, month, 1).with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
  5. LocalDate ld2 =
  6. LocalDate.of(year, month, 1).with(TemporalAdjusters.lastInMonth(DayOfWeek.MONDAY));
  7. System.out.println(ChronoUnit.WEEKS.between(ld1, ld2) + 1); // 5
展开查看全部
ulydmbyx

ulydmbyx2#

java.time文件

使用java 8及更高版本中内置的java.time类。

  1. YearMonth month = YearMonth.of(2017, 1);
  2. LocalDate start = month.atDay(1).with(TemporalAdjusters.nextOrSame(DayOfWeek.MONDAY));
  3. int count = (int) ChronoUnit.WEEKS.between(start, month.atEndOfMonth()) + 1;
  4. System.out.println(count);
55ooxyrt

55ooxyrt3#

java 7+作业时间

  1. import org.joda.time.DateTimeConstants;
  2. import org.joda.time.Days;
  3. import org.joda.time.LocalDate;
  4. import java.util.Date;
  5. public class Test {
  6. public static int getNumberOfMondays(Date start, Date end) {
  7. LocalDate startDate = LocalDate.fromDateFields(start);
  8. LocalDate endDate = LocalDate.fromDateFields(end);
  9. int days = Days.daysBetween(startDate, endDate).getDays();
  10. int mondayCount = 0;
  11. //Get number of full weeks: 1 week = 1 Monday
  12. mondayCount += days / 7;
  13. int remainder = days % 7;
  14. if (startDate.dayOfWeek().get() == DateTimeConstants.MONDAY || startDate.dayOfWeek().get() > (startDate.dayOfWeek().get() + remainder) % 8) {
  15. mondayCount++;
  16. }
  17. return mondayCount;
  18. }
  19. }
展开查看全部

相关问题