【发布时间】:2016-03-14 06:06:32
【问题描述】:
我想检查我的事件是否重叠。我以日期格式保存了开始时间和结束时间。我的尝试是通过比较来检查日期是否重叠。但有时会失败。
它在晚上 11 点到凌晨 12 点的值和上午 12 点到凌晨 1:00 的值失败。有时也会在其他时间段之间失败。
因为我有一个存储为的时间段,
datefrom -- Mon mar 14 23:00:00 dateto -- Mon mar 14 00:00:00
现在我尝试将时间段添加为:
checkFromDate -- 3 月 14 日星期一 12:14:00 checkToDate -- 3 月 14 日星期一 11:14:00
它返回true。显示事件存在,尽管它不存在。
日期格式为:
df = new SimpleDateFormat("E MMM dd HH:mm:ss zzzz yyyy");
日期格式有什么问题吗??
检查重叠函数
public void checkOverlappingEvents()
{
List<EventData> checkOverlappingEvents = new ArrayList<>();
EventTableHelper eventTableHelper = new EventTableHelper(AddEventActivity.this);
switch (dayOfWeek)
{
case "Mon":
checkOverlappingEvents = eventTableHelper.getAllEvents("Mon");
for (EventData e : checkOverlappingEvents)
{
df = new SimpleDateFormat("E MMM dd HH:mm:ss zzzz yyyy");
Date checkFromDate = new Date();
Date checkToDate = new Date();
try {
checkFromDate = df.parse(e.getFromDate());
checkToDate = df.parse(e.getToDate());
} catch (ParseException ex) {
}
// int startHours = datefrom.getHours();
// int endHours = dateto.getMinutes();
// String startTime = checkFromDate.getHours() + ":" + checkFromDate.getMinutes();
// String endTime = checkToDate.getHours() + ":" + checkToDate.getMinutes();
// String startDate = datefrom.getHours() + ":" + datefrom.getMinutes();
// String endDate = dateto.getHours() + ":" + dateto.getMinutes();
if(datefrom.compareTo(checkToDate) == checkFromDate.compareTo(dateto))
{
overlapEvents = true;
count ++;
Log.d("count",String.valueOf(count));
}
}
这无济于事,所以我想只比较日期的小时和分钟。我的尝试是从日期获取小时和分钟并比较它们,它以 cmets 为单位。但它需要一些其他的逻辑。
谁能帮我解决这个问题?
编辑:
当我再次测试时,我发现如果一旦条件返回 true,那么第二次在另一个时间段内也会显示 true,尽管它不是 true。
就像现在一样,我有一个下午 12:50 - 下午 1:50 的活动,我尝试添加另一个活动 时间 12:00 pm - 1:00 pm 并且返回 true,计数为 1。这是正确的。
但是,如果我再次尝试更改时间而不返回,而不刷新活动,我尝试将时间更改为下午 12:00 到下午 12:30,因为它也返回 true,计数为 1,因为这不应该是 true没有这个时间段的事件。
如果我一次又一次地返回如果我尝试添加 12:00 pm 到 12:30 pm 的事件,它返回 false,它会成功添加。现在这个我不知道是怎么回事?
我想我需要刷新存储比较事件的列表。我该怎么做?我应该在哪里做?
谢谢。
【问题讨论】:
-
尝试使用日期格式函数,如 .befor 或 .after 或 .equals 我觉得这可以帮助你
-
你能指导我完成代码吗? @RakshitNawani
-
我也试过了 -- startDate1.before(endDate2) && startDate2.before(endDate1);
-
结果也一样。
-
你能帮我打印你正在比较的两个日期,然后给我看结果吗
标签: java android datetime overlap