使用Java日历计算某些日期与特定日期之间的天数

时间:2011-09-12 14:27:23

标签: java

我正试图想出一种方法来计算两个不同日期之间的天数,但是一周中的某些日子只会被计算在内。例如,假设我们想要计算8/1到8/31之间的工作日数,但员工只能在周一,周二和周三工作。结果是该员工在此期间仅工作15天。

有没有人使用java Calendar类组合类似的东西?

3 个答案:

答案 0 :(得分:3)

尝试Joda Time,是管理日期和时间的最佳解决方案。

dogbane 的代码已更正:

    final Calendar current = Calendar.getInstance();
    current.set(2011, 7, 1);

    final Calendar end = Calendar.getInstance();
    end.set(2011, 7, 31);
    int count = 0;
    while (!current.after(end)) {
        int dayOfWeek = current.get(Calendar.DAY_OF_WEEK);
        if (dayOfWeek == Calendar.MONDAY || 
            dayOfWeek == Calendar.TUESDAY || 
            dayOfWeek == Calendar.WEDNESDAY) {
            count++;
        }
        current.add(Calendar.DAY_OF_MONTH, 1);
    }
    System.out.println(count);

如果使用 Joda时间

    DateTime current = new DateTime(2011, 8, 1, 0, 0, 0, 0);
    DateTime end = new DateTime(2011, 8, 31, 0, 0, 0, 0);
    int count = 0;
    while (!current.isAfter(end)) {

        int dayOfWeek = current.getDayOfWeek();
        if (dayOfWeek == DateTimeConstants.MONDAY || dayOfWeek == DateTimeConstants.TUESDAY
                || dayOfWeek == DateTimeConstants.WEDNESDAY) {
            count++;
        }
        current = current.plusDays(1);
    }
    System.out.println(count);

答案 1 :(得分:0)

您可以将日期增加一天,直至到达结束日期为止。在每次迭代时,检查一天是周一,周二或周三并增加一个计数器。

例如:

final Calendar current = Calendar.getInstance();
current.set(2011, 7, 1);

final Calendar end = Calendar.getInstance();
end.set(2011, 7, 31);

int count = 0;
while (current.compareTo(end) != 0) {
    current.add(Calendar.DAY_OF_MONTH, 1);
    int dayOfWeek = current.get(Calendar.DAY_OF_WEEK);
    if (dayOfWeek == Calendar.MONDAY || 
        dayOfWeek == Calendar.TUESDAY || 
        dayOfWeek == Calendar.WEDNESDAY) {
        count++;
    }
}
System.out.println(count);

答案 2 :(得分:0)

您可以使用java.util.Calendar推出自己的解决方案;但是,我建议查看一些现有的库,例如ObjectLab Kit日期实用程序。