2

我正在尝试确定 Java 中一个月中工作日的顺序序数。即,如果星期五是一个月的第一个或第三个星期五。

在阅读了我在 Java 日历上找到的所有内容和此处的帖子后,我找不到简单的方法。我能想到的一种方法是确定本月的第一周在本月有多少天,然后根据所讨论的日期调整 week_of_month 。但是,它需要一些复杂的计算。任何人都知道一个简单的解决方案?

4

1 回答 1

6

只需取一个月中的某一天,减去 1,除以 7,然后加 1。该月的前 7 天始终是第一天(星期二、星期三、...),无论该月的实际 1 号是一周中的哪一天.

我个人会使用 Joda Time:

public int getWeekOfWeekDay(LocalDate date) {
    return ((date.getDayOfMonth() - 1) / 7) + 1;
}

...但是您可以使用Calendar和获取Calendar.DAY_OF_MONTH字段的值来执行相同的操作。

编辑:实际上,我刚刚注意到,对于更改,java.util.Calendar实际上比 Joda Time 更简单 - 它有一个特定的字段!所有你需要的是:

int weekOfWeekDay = calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH);

从文档中DAY_OF_WEEK_IN_MONTH

get 和 set 的字段编号,指示当前月份中星期几的序号。与 DAY_OF_WEEK 字段一起,它唯一地指定一个月内的一天。与 WEEK_OF_MONTH 和 WEEK_OF_YEAR 不同,该字段的值不依赖于 getFirstDayOfWeek() 或 getMinimalDaysInFirstWeek()。DAY_OF_MONTH 1 到 7 始终对应 DAY_OF_WEEK_IN_MONTH 1;8 到 14 对应于 DAY_OF_WEEK_IN_MONTH 2,依此类推。

我想我可能仍然会使用 Joda Time 版本,因为它只是一个更好的 API,但如果你被迫使用Calendar,至少你可以一次性完成。

于 2013-06-10T21:11:05.950 回答