Tady je nastin reseni, psal jsem to ted narychlo, tak doufam, ze tam
neni nejaka vyrazna chyba.
-- pepa cacek
import java.util.Calendar;
public class Test {
static final long ONE_HOUR = 60 * 60 * 1000L;
public static long daysBetween(final Calendar c1, final Calendar c2) {
if (c1.after(c2)) {
throw new IllegalArgumentException("Date order wrong.");
}
return ((c2.getTimeInMillis() - c1.getTimeInMillis() +
ONE_HOUR) / (ONE_HOUR * 24)) + 1L;
}
public static void main(String args[]) {
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.set(2007, 6, 21, 0, 0, 0);
cal2.set(2007, 7, 5, 0, 0, 0);
int daysBetween = (int) daysBetween(cal1, cal2);
System.out.println("Days between: " + daysBetween);
// pozice prvniho data v ramci tydne, pondeli=0
int firstPos = (cal1.get(Calendar.DAY_OF_WEEK) + 5) % 7;
int offset = daysBetween % 7;
int weekendDays = (daysBetween/7)*2;
if (offset>0) {
if (firstPos==5 && offset>1) {
//zacatek v sobotu
weekendDays += 2;
} else if (firstPos==6 || offset + firstPos == 6) {
// jen sobota nebo jen nedele
weekendDays++;
} else if (offset + firstPos > 6) {
// cely vikend v rozdilu
weekendDays += 2;
}
}
System.out.println("Weekend days: " + weekendDays);
int holidays = 0;
//tady dodelat select do databaze, neco jako:
// SELECT count(*) from SVATKY where datum between ? and ? and
DayOfWeek(datum) not between 6 and 7
System.out.println("Workdays between: " + (daysBetween -
weekendDays - holidays));
}
}
On 7/24/07, Ladislav Starý <[EMAIL PROTECTED]> wrote:
Zdravim,
nez zacnu vymyslet nejaky algoritmus, chtel bych se zeptat, jestli se da
nejakym elegantnim zpusobem zjistit pocet pracovnich dnu mezi dvema
kalendarnimi dny.
Pocet kalendarnich dnu jsem dokazal zjistit pomoci rozdilu milisekund,
ale jak to udelat s kalendarnimi dny, to me zatim nenapada.
Zatim jsem uvazoval, ze bych postupne prochazel vsechny kalendarni dny v
tom intervalu a testoval, jestli je pracovni nebo ne.
Prijde mi ale hodne pomaly. Navic jeste budu muset resit statni svatky.
Ladislav Stary