Answer the question
In order to leave comments, you need to log in
Answer the question
In order to leave comments, you need to log in
Objectlabkit is a wrapper around joda-time.
Or work hours calculation from jBPM
I've been looking for it too, but haven't found anything useful. It turned out that writing all the logic yourself is not such a big deal. I'll throw off the Java sources of a couple of methods, I hope it helps to understand the direction. Sources under GWT, you will need to replace DateTimeFormat with SimpleDateFormat and redo plusDays()...
/**
* Метод проверяет, является ли указанная дата выходным днем, или праздничным днем. Также осуществляется
* проверка - является ли указанная дата выходным днем, указанным как рабочий день (постановлением Правительства)
* @param date проверяемая дата
* @return признак, является ли указанная дата рабочим днем
*/
public boolean isWorkingDay(Date date) {
String dayOfWeek = DateTimeFormat.getFormat("EEE").format(date);
String dateStr = DateTimeFormat.getFormat("yyyy-MM-dd").format(date);
return (!dayOfWeek.startsWith("Sat") && !dayOfWeek.startsWith("Sun")
&& !holidays.contains(dateStr))
||
workWeekends.contains(dateStr);
}
/**
* Метод осуществляет проверку, является ли указанная дата выходным днем, и если да, то переносит дату на
* следующий после выходных рабочий день.
* @param date проверяемая дата
* @return исходная дата либо дата первого рабочего дня после выходных
*/
public Date getBusinessDate(Date date) {
while (true) {
if (isWorkingDay(date)) {
return date;
} else {
date = plusDays(date, 1);
}
}
}
/**
* Метод осуществляет расчет указанного количества рабочих дней, которые должны истечь с момента указанной
* начальной даты, и возвращает дату наступления искомого срока
* @param date начальная дата, относительно которой осуществляется расчет
* @param days количество рабочих дней, которые должны пройти относительно начальной даты
* @return искомая дата
*/
public Date addBusinessDays(Date date, int days) {
for (int i = 1; i < days; i++) {
date = plusDays(date, 1);
if (!isWorkingDay(date)) {
days++;
}
}
return date;
}
public static Date plusDays(Date date, int days) {
Date clone = new Date(date.getTime());
clone.setDate(date.getDate() + days);
return clone;
}
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question