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