1

2013 年 11 月 19 日の雇用と 2014 年 10 月 1 日の雇用終了の 2 つの日付があります。どちらも週末を考慮せずに合計時間に変換されますが、年が異なるため、出力は次のように表示されます。総労働時間は - 1200:

private int calculateTimeInternship(Vacancy peoplevacancy){
    int hourWorked = 0; 
    Calendar date1 = Calendar.getInstance();  
    Calendar date2 = Calendar.getInstance();    

    date1.setTime(peoplevacancy.getDthiring());  
    date2.setTime(peoplevacancy.getDtendhiring());  

    int initiation = date1.get(Calendar.DAY_OF_YEAR);  
    int end = date2.get(Calendar.DAY_OF_YEAR);  

    int amountDay = (initiation - end) + 1;  

    for (; initiation <= end; inicio++){  
        if (date1.get(Calendar.DAY_OF_WEEK) == 1   || date1.get(Calendar.DAY_OF_WEEK) == 7)  
        amountDay--;  

        date1.add(Calendar.DATE, 1);  
    }

    hourWorked = amountDay * 4 //4 hour per day;
    return hourWorked ;
}
4

3 に答える 3

0

あなたはすでにインターンシップの毎日をループしているので、単純に就業日を数えてみませんか?

int amountDay = 0;
while (date1.compareTo(date2) <= 0) {
    if (date1.get(Calendar.DAY_OF_WEEK) != 1
    &&  date1.get(Calendar.DAY_OF_WEEK) != 7)  
        amountDay++;  
    date1.add(Calendar.DATE, 1);  
}

ところで、あなたの元のコードには微妙な "off by one" バグがあります。合計 amountDays の減算では終了日が除外されますが、週末を差し引く場合、ループには終了日が含まれます。

于 2013-11-09T04:23:43.907 に答える