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

时间:2013-06-10 21:09:46

标签: java datetime ordinal

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

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

1 个答案:

答案 0 :(得分:6)

只需取一个月的日期,减去1,除以7,然后加1.本月的前七天总是第一天(周二,周三......)无论哪一天当月的第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的文档:

  

获取和设置的字段编号,表示当前月份中某一天的序号。与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,但是如果你强制使用{{1至少你可以一次性做到这一点。