如何计算Java中一个月中特定工作日的顺序(序数)数

win*_*ime 2 java datetime ordinal

我试图确定Java中一个月中工作日的序数序数.即如果星期五是一个月的第一个或第三个星期五.

在阅读了我在Java Calendar上发现的所有内容并在这里发帖后,我找不到一个简单的方法.我能想到的一种方法是确定本月第一周有多少天,然后根据相关日期的哪一天调整week_of_month.但是,它需要一些复杂的计算.谁知道一个简单的解决方案

Jon*_*eet 6

只需取一个月中的一天,减去1,除以7,然后加1.本月的前七天始终是第一个(周二,周三......)一周中的任何一天,实际的第一个月是.

就个人而言,我会使用Joda Time:

public int getWeekOfWeekDay(LocalDate date) {
    return ((date.getDayOfMonth() - 1) / 7) + 1;
}
Run Code Online (Sandbox Code Playgroud)

...但你可以使用Calendar和获取Calendar.DAY_OF_MONTH字段的值来做同样的事情.

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

int weekOfWeekDay = calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH);
Run Code Online (Sandbox Code Playgroud)

来自以下文档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,至少你可以一次性完成.