我正在尝试确定Java中一个月中工作日的顺序序号。即星期五是一个月的第一个或第三个星期五。
在阅读了我在Java Calendar上发现的所有内容并在此处发布后,我找不到一个简单的方法。我能想到的一种方法是确定本月第一周有多少天,然后根据相关日期的哪一天调整week_of_month。但是,它需要一些复杂的计算。有人知道一个简单的解决方案吗?
答案 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至少你可以一次性做到这一点。