Java 如何从数据库中获取日期并检查它们是否重叠?

Java 如何从数据库中获取日期并检查它们是否重叠?,java,android,sqlite,date,overlap,Java,Android,Sqlite,Date,Overlap,我有一个sqlite数据库,其中存储了所有事件。我以日期格式存储每个事件的StartTime和EndTime 我有几天的标签和一个添加事件的活动片段。事件显示在另一个片段中 现在,我想检查事件是否相互重叠,并根据哪个应用程序显示消息 当用户保存事件时,如何在添加的事件活动中显示消息 我该怎么做 我已经尝试过这种方法,但仍然会添加具有相同开始时间和结束时间的事件: ImageButton ImageButton=(ImageButton)findViewById(R.id.imgbtn_fab);

我有一个sqlite数据库,其中存储了所有事件。我以日期格式存储每个事件的
StartTime
EndTime

我有几天的标签和一个添加事件的活动片段。事件显示在另一个片段中

现在,我想检查事件是否相互重叠,并根据哪个应用程序显示消息

当用户保存事件时,如何在添加的事件活动中显示消息

我该怎么做

我已经尝试过这种方法,但仍然会添加具有相同开始时间和结束时间的事件:

ImageButton ImageButton=(ImageButton)findViewById(R.id.imgbtn_fab);
imageButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
eventTitle=title.getText().toString();
EventTableHelper db=新的EventTableHelper(getApplication());
列出事件;
events=db.getAllEvents();
for(EventData事件数据:事件){
字符串datefrom=eventData.getFromDate();
String[]times=datefrom.substring(11,16).split(“:”);
minutesFrom=Integer.parseInt(乘以[0])*60+Integer.parseInt(乘以[1]);
字符串dateTo=eventData.getToDate();
//times=dateTo.substring(11,16).split(“:”);
字符串[]times1=dateTo.substring(11,16).split(“:”);
minutesTo=Integer.parseInt(times1[0])*60+Integer.parseInt(times1[1]);
}
if(eventTitle.length()=0){
Toast.makeText(getApplicationContext(),“标题不能为空。”,Toast.LENGTH_LONG.show();
}
else if(minutesFrom==minutesTo){
Toast.makeText(getApplicationContext(),“存在相同时间的事件。”,Toast.LENGTH_LONG.show();
}
其他的
{
db.addEvent(新的事件数据(事件标题、开始时间、结束时间、星期几、位置));
setResult(结果_OK,i);
完成();
}
}
});
我有这样的约会:

c=Calendar.getInstance();
年份=c.get(日历年);
月=c.get(日历月);
day=c.get(日历,每月的第天);
小时=c.get(日历小时);
分钟=c.get(日历分钟);
df=新的简化格式(“HH:mm a”);
datefrom=c.getTime();
startTime=String.valueOf(datefrom);
aTime=df.format(datefrom.getTime());
showFromTime.setText(aTime);
c、 添加(日历小时/天,1);
dateto=c.getTime();
endTime=String.valueOf(dateto);
bTime=df.format(dateto.getTime());
showToTime.setText(bTime);
我已经创建了一个
EventTableHelper

公共类EventTableHelper扩展了SQLiteOpenHelper{
私有静态最终字符串TABLE=“event”;
私有静态最终字符串密钥\u ID=“ID”;
私有静态最终字符串键\u TITLE=“TITLE”;
私有静态最终字符串键\u FROM_DATE=“datefrom”;
私有静态最终字符串密钥\u TO_DATE=“dateto”;
私有静态最终字符串KEY_LOCATION=“LOCATION”;
私有静态最终字符串密钥\u DAY\u OF_WEEK=“dayofweek”;
公共EventTableHelper(上下文){
super(context,Constants.DATABASE\u NAME,null,Constants.DATABASE\u VERSION);
}
@凌驾
public void onCreate(SQLiteDatabase db){
}
public void createTable(SQLiteDatabase db){
字符串CREATE_EVENTS_TABLE=“CREATE TABLE”+TABLE+”(“
+密钥ID+“整数主键,”
+键+标题+文本
+键从日期+日期
+按键至日期+日期
+每周的关键日期+“文本”
+按键位置+“文本”+”;
execSQL(创建事件表);
}
//升级数据库
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
db.execSQL(“如果存在删除表”+表);
//createTable(db);
//onCreate(db);
}
public void addEvent(EventData事件){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues=新的ContentValues();
value.put(KEY_TITLE,event.getTitle());
value.put(KEY_FROM_DATE,event.getFromDate());
put(KEY-TO-DATE,event.getToDate());
value.put(KEY_DAY_OF u WEEK,event.getDayOfWeek());
value.put(KEY_LOCATION,event.getLocation());
db.insert(表,空,值);
db.close();
}
EventData getEvent(int id){
SQLiteDatabase db=this.getReadableDatabase();
EventData EventData=新的EventData();
Cursor Cursor=db.query(表,新字符串[]{KEY\u ID,
KEY\u TITLE,KEY\u FROM\u DATE,KEY\u TO\u DATE,KEY\u LOCATION},KEY\u ID+“=?”,
新字符串[]{String.valueOf(id)},null,null,null,null);
if(cursor!=null&&cursor.moveToFirst()){
eventData=新的eventData(Integer.parseInt(cursor.getString(0))、cursor.getString(1)、cursor.getString(2),
cursor.getString(3),cursor.getString(4));
}
返回事件数据;
}
公共列表getAllEvents(){
List conList=新建ArrayList();
String selectQuery=“SELECT*FROM”+表格;
SQLiteDatabase db=this.getWritableDatabase();
Cursor Cursor=db.rawQuery(selectQuery,null);
if(cursor.moveToFirst()){
做{
EventData事件=新的EventData();
setId(Integer.parseInt(cursor.getString(0));
event.setTitle(cursor.getString(1));
event.setFromDate(cursor.getString(2));
event.setToDate(cursor.getString(3));
event.setLocation(cursor.getString(4));
conList.add(事件);
}while(cursor.moveToNext());
}
返回列表;
}
}
我尝试在活动中使用getAll events函数来获取数据

编辑:这是我当前的代码

@覆盖
公共vo
List<EventData> getOverlappingEvents(Date startTime, Date endTime) {
    List<EventData> conList = new ArrayList<EventData>();

    String selectQuery = "SELECT  * FROM " + TABLE
      + " WHERE (" + KEY_FROM_DATE + " < '" + startTime
      + "' AND '" + startTime + "' < " + KEY_TO_DATE + ") OR "
      + " (" + KEY_FROM_DATE + " < '" + endTime
      + "' AND '" + endTime + "' < " + KEY_TO_DATE + ") OR "

      + " (" + KEY_FROM_DATE + " < '" + startTime
      + "' AND '" + endTime + "' < " + KEY_TO_DATE + ") OR "
      + " ('" + startTime + "' < " + KEY_FROM_DATE
      + " AND " + KEY_TO_DATE + " < '" + endTime + "')";

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    if (cursor.moveToFirst()) {
        do {

            EventData event = new EventData();

            event.setId(Integer.parseInt(cursor.getString(0)));
            event.setTitle(cursor.getString(1));
            event.setFromDate(cursor.getString(2));
            event.setToDate(cursor.getString(3));
            event.setLocation(cursor.getString(4));

            conList.add(event);
        } while (cursor.moveToNext());
    }
    return conList;
}
events = db.getOverlappingEvents();
...
else if(minutesFrom == minutesTo)
else if(events.size() > 0)
boolean doesEventOverlap(Date startTime, Date endTime) {
    String selectQuery = "SELECT COUNT(*) FROM " + TABLE
      + " WHERE (" + KEY_FROM_DATE + " < '" + startTime
      + "' AND '" + startTime + "' < " + KEY_TO_DATE + ") OR "
      + " (" + KEY_FROM_DATE + " < '" + endTime
      + "' AND '" + endTime + "' < " + KEY_TO_DATE + ") OR "

      + " (" + KEY_FROM_DATE + " < '" + startTime
      + "' AND '" + endTime + "' < " + KEY_TO_DATE + ") OR "
      + " ('" + startTime + "' < " + KEY_FROM_DATE
      + " AND " + KEY_TO_DATE + " < '" + endTime + "')";

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    if (cursor.moveToFirst()) {
        do {
            EventData event = new EventData();
            return cursor.getInt(0) > 0;
        } while (cursor.moveToNext());
    }
    return false;
}
else if(minutesFrom == minutesTo)
else if(db.doesEventOverlap())