java - 使用日期参数计算工作日

标签 java date time calendar

我需要制作一个应用程序来计算已经有多少个工作日。例如,2014 年 9 月 23 日。这是本月的第 17 个工作日。显然它不包括周末。当该月结束时,计数器将重新开始。因此,当日期为 10 月 1 日时,计数器将等于 1。

我已经有了这组代码,它在今天(2014 年 11 月 24 日)正确工作。输出是 17,这是正确的。但对于其他日期来说,这是错误的。我没有进行一些验证,例如周末检查,因为我正在测试逻辑。

这是代码块:

Date dateToday = new Date();
    Calendar cal = Calendar.getInstance();
    cal.setTime(dateToday);
    int year = cal.get(Calendar.YEAR);
    int month = cal.get(Calendar.MONTH);
    int day = cal.get(Calendar.DAY_OF_WEEK);

    int week = cal.get(Calendar.WEEK_OF_MONTH);
    int dayNo=0;


    System.out.println("year= " + year + " month= " + month + " day= "
            + day + " week= " + week);
    if ((day == Calendar.SATURDAY) && (day == Calendar.SUNDAY)) {
        willPush = false;
    }else{
        if(week>4){
            week-=1;
        }
        if(week==1){
            dayNo+=day-1;
        }else if(week==2){
            dayNo=day+5;
        }else if(week==3){
            dayNo=day+10;
        }else if(week==4){
            dayNo=day+15;
        }else if(week==5){
            dayNo=day+20;
        }
        dayNo-=1;
    }

    System.out.println("DayNO: "+dayNo);

更新:刚刚发现这个逻辑有缺陷,非常有缺陷。将尝试一种新方法,我正在考虑循环查看该月中的几天,然后检查它们是否是周末。但不确定这是否是最好的主意。

最佳答案

这是示例代码。使用joda图书馆。

import org.joda.time.DateTimeConstants;
import org.joda.time.LocalDate;

public class WeekDays {
    public static void main(String[] args) {
        final LocalDate start = new LocalDate(2014, 1, 1);
        final LocalDate end = new LocalDate(2014, 1, 14);

        LocalDate weekday = start;

        if (start.getDayOfWeek() == DateTimeConstants.SATURDAY ||
                start.getDayOfWeek() == DateTimeConstants.SUNDAY) {
            weekday = weekday.plusWeeks(1).withDayOfWeek(DateTimeConstants.MONDAY);
        }

        int weekdayCount = 1;
        while (weekday.isBefore(end)) {
            weekdayCount++;
            System.out.println(weekday);

            if (weekday.getDayOfWeek() == DateTimeConstants.FRIDAY)
                weekday = weekday.plusDays(3);
            else
                weekday = weekday.plusDays(1);
        }

        System.out.println(weekdayCount);
    }
}

关于java - 使用日期参数计算工作日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27100733/

相关文章:

excel - 计算某个日期出现的次数并绘制图表

mysql - Excel 导入 MySQL : Date inserted as 0000-00-00

java - 从日期开始的本地时间

c++ - Rand() 返回相同或非常相似的输出值

python - 如何在 Python 中检索 UTC 时间?

java -::Android Framework::哪个是first runner,zygote还是dalvik?

java - 用于目录压缩器的 JUnit

java - 如何将环境变量作为命令的一部分传递

java - 使用 IBM MQ 类浏览、读取和删除队列中的消息

java - 时间排序器 : 12 hour clock