【发布时间】:2014-01-07 18:37:47
【问题描述】:
实际上,这项任务对我来说似乎很容易,但我有点卡住了,希望能得到一些提示:D
我有一些活动的开始和结束时间 - 我想创建一个包含日历周的表格。
因此我写了一个方法来检查一个事件是否在本周之内,像这样为它着色:
private boolean inWeek(Date date, Entry pe) {
return ((pe.getStartsAt().after(Util.firstDayOfWeek(date)) || pe.getStartsAt().equals(Util.firstDayOfWeek(date)))
&& (pe.getEndsAt().before(Util.lastDayOfWeek(date)) || pe.getEndsAt().equals(Util.lastDayOfWeek(date))));
}
如果事件只持续一周,这个案例还可以。但是如果活动在本周之前开始,或者在本周之后结束,甚至持续数周呢?
它变得非常复杂,我目前的解决方案是这样的:
private boolean inWeek(Date date, Entry pe) {
return ( pe.getStartsAt().after(Util.firstDayOfWeek(date)) && pe.getEndsAt().after(Util.firstDayOfWeek(date)) && pe.getEndsAt().before(Util.lastDayOfWeek(date)) )
|| ( pe.getStartsAt().before(Util.lastDayOfWeek(date)) && pe.getStartsAt().after(Util.firstDayOfWeek(date)) && pe.getEndsAt().after(Util.lastDayOfWeek(date)) )
|| ( pe.getStartsAt().after(Util.firstDayOfWeek(date)) && pe.getEndsAt().before(Util.lastDayOfWeek(date)) )
|| ( pe.getStartsAt().before(Util.firstDayOfWeek(date)) && pe.getEndsAt().after(Util.lastDayOfWeek(date)) );
}
但在某些单元格中仍然没有显示正确的颜色。有人对我有任何提示吗?
(...不建议joda times ^^)
【问题讨论】:
-
日期参数应该意味着您正在传递什么?
-
这些只是简单的 java 日期对象。每个“条目”都有一个日期对象作为开始日期和结束日期,“Util”类返回输入日期的日期对象以传递星期一和星期日(在我的情况下是每个单元格)。
-
你为什么不想使用joda?
-
这是我使用日期对象的唯一代码部分。你不同意一个完整的库对于一个简单的逻辑方法来说是多余的吗?
-
@AudreyDelany 不,添加Joda-Time 并不过分。我对任何新项目做的第一件事就是添加 Joda-Time。例如,我在开发和测试期间立即使用它来注销命令行。出于您的目的,Joda-Time 包含直接针对您的问题的类。至于“一种简单的方法”,处理日期时间从来没有简单!