我想计算一个事件的结束日期(和时间)。我知道开始日期和持续时间(以分钟为单位)。但是:
使用Joda时间库是否有简单的方法来实现这些情况?
答案 0 :(得分:2)
Jodatime会帮助你 - 我会说很多 - 但你需要自己编写逻辑,循环跳过一整天和一天中的某些时间。在我看来,不是很简单,也不是很复杂。
答案 1 :(得分:1)
首先,您必须定义“假期”。并非每个语言环境都具有相同的语言环境,因此必须将其设置为通用且可插入。
我认为这不是“简单”。
答案 2 :(得分:1)
你有没有看过Holiday calculation项目?它在jodatime的相关项目中有特色,可能很有用
答案 3 :(得分:0)
这是我使用的一些代码。 dtDateTimes
可以包含您预先定义的假日日期(例如英国银行假日),dtConstants
可以包含您想要匹配的重复日期,例如DateTimeConstants.SATURDAY
。
/**
* Returns a tick for each of
* the dates as represented by the <code>dtConstants</code> or the list of <code>dtDateTimes</code>
* occurring in the period as represented by begin -> end.
*
* @param begin
* @param end
* @param dtConstants
* @param dtDateTimes
* @return
*/
public int numberOfOccurrencesInPeriod(final DateTime begin, final DateTime end, List<Integer> dtConstants, List<DateTime> dtDateTimes) {
int counter = 0;
for (DateTime current = begin; current.isBefore(end); current = current.plusDays(1)) {
for (Integer constant : dtConstants) {
if (current.dayOfWeek().get() == constant.intValue()) {
counter++;
}
}
for (DateTime dt : dtDateTimes) {
if (current.getDayOfWeek() == (dt.getDayOfWeek())) {
counter++;
}
}
}
return counter;
}
/**
* Returns true if the period as represented by begin -> end contains any one of
* the dates as represented by the <code>dtConstants</code> or the list of <code>dtDateTimes</code>
*
* @param begin
* @param end
* @param dtConstants
* @param dtDateTimes
*/
public boolean isInPeriod(final DateTime begin, final DateTime end, List<Integer> dtConstants, List<DateTime> dtDateTimes) {
return numberOfOccurrencesInPeriod(begin, end, dtConstants, dtDateTimes) > 0;
}