Android:将当前日期和时间与数据库中的日期和时间进行比较

时间:2015-05-04 10:06:05

标签: java android database sqlite date

我目前正在尝试在android中创建一个警报应用程序,作为我课程的一部分。目前,所有内容都与日期和时间检查数据库中的内容有关。

在我的" AlarmCheckDateAndTime中,我需要帮助

  • 将当前日期与所有日期进行比较

  • 在与日期相同的记录中比较当前时间与时间

我想要这样做的方式是有两个" if"该类文件中的语句。一个将进行日期检查的,并在其中进行时间检查。有人有可能给我一些帮助吗?

我的AlarmCheckDateAndTime类文件

inject.js

我的UserInputAlarmData类文件

public class AlarmCheckDateAndTime{
    DatabaseHandler dbHandler;



public static void main (String[] args){
    Date ThisDate = Calendar.getInstance().getTime();

    SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");

    String DateChecker = formatter.format(ThisDate);

    Date ThisTime = Calendar.getInstance().getTime();
    SimpleDateFormat timeformatter = new SimpleDateFormat("hh:mm");
    String TimeChecker = formatter.format(ThisTime);

  }
}

我的DatabaseHandler类

    public class UserInputAlarmData {
        private int _id;
        private String _title, _date, _time, _song;


        public UserInputAlarmData (int id, String title, String date, String time, String song){
            _id = id;
            _title = title;
            _date = date;
            _time = time;
            _song = song;

        }

        public String get_title() {
            return _title;
        }

        public String get_date() {
            return _date;
        }

        public String get_time() {
            return _time;
        }

        public String get_song() {
            return _song;
        }

        public int getId() {return  _id;}
        public String getTitle() {return _title;}
        public String getDate() {return _date;}
        public String getTime() {return _time;}
        public String getSong() {return  _song;}
    }

如果您需要查看任何其他类文件,我可以提供它们。

非常感谢你提前帮助

2 个答案:

答案 0 :(得分:0)

现在,当您想将日期插入数据库时​​,可以使用此代码。

从日期到字符串。

SimpleDateFormat  dateformat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
try {  
  Date date = new Date();  
 String datetime = dateFormat.format(date); // this date & time you can store in database as a string 
 System.out.println("Current Date Time : " + datetime); 
} catch (ParseException e) {  
    // TODO Auto-generated catch block  
    e.printStackTrace();  
}

在数据库中插入字符串' date'

sqlite中的日期格式应为以下格式:

YYYY-MM-DD
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.SSS
YYYY-MM-DDTHH:MM
YYYY-MM-DDTHH:MM:SS
YYYY-MM-DDTHH:MM:SS.SSS
HH:MM
HH:MM:SS
HH:MM:SS.SSS
now
DDDDDDDDDD 

有关详细信息,请查看here

将日期作为字符串保存到数据库后,如果您尝试将其恢复,则会获得字符串日期。

因此,使用id检索特定的字符串数据。现在您有一个字符串类型的日期。所以再次转换为日期

从字符串到日期

String dtStart = "2010-10-15T09:27:37";  // example this is your string date
SimpleDateFormat  format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");  
try {  
    Date dbDate = format.parse(dtStart);  // database date in date format
    System.out.println(dbDate);  
} catch (ParseException e) {  
    // TODO Auto-generated catch block  
    e.printStackTrace();  
}

进入日期比较,你可以比较日期和时间。只在一次的时间。所以现在你有两个约会。一个是您当前的系统日期,另一个是您的数据库日期。所以使用以下方法比较两者。

 public static Boolean diff( Date date1,
            Date date2 )
    {
        Calendar c1 = Calendar.getInstance(); // your current date
        Calendar c2 = Calendar.getInstance();  // your database date

        c1.setTime( date1 );
        c2.setTime( date2 );


        if( c1.before( c2 ) )
        {
            return true;  // database date is after the current date 
        }
        else if( c2.before( c1 ) )
        {
           return false;  // database date is before the current date 
        }

    }

此处Date1是您当前的日期,Date2是您的数据库日期。

通过将这两个日期传递给上述方法,您将获得一个布尔值true / false,它将告知当前日期和数据库日期之间是否存在任何差异。

如果要检查数据库中的所有日期,则可以使用此方法从数据库中获取UserInputAlarmData列表。

public List<UserInputAlarmData> getAllAlarmData() {
        List<UserInputAlarmData> AlarmDatas = new ArrayList<UserInputAlarmData>();
        SQLiteDatabase db = getWritableDatabase();
        Cursor cursor = db.rawQuery("SELECT * FROM " + DATABASE_TABLE, null);

        if (cursor.moveToFirst()) {
            do {
                UserInputAlarmData AlarmData = new UserInputAlarmData(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4));
                AlarmDatas.add(AlarmData);
            }
            while (cursor.moveToNext());
        }
        return  AlarmDatas;
    }

获取列表后,您可以循环并根据列表大小逐个检查日期。

希望它会帮助你

答案 1 :(得分:0)

这取决于您存储日期的方式。

您可以使用

  1. 使用日历格式。

    Calendar cal = new GregorianCalendar();
    cal.setTimeInMillis(getYourMillisFromTheDBInHere);
    

    //现在你可以比较字段

    cal.get(Calendar.FIELDNAME)
    

    //请注意,月份以0开头,因此二月份为1

  2. 如果您只是想比较纯时间which is before which,您可以使用:

    1. milliseconds并简单地将这些值与&lt; (少于)

    2. 使用Date课程并致电after()before()

    3. 如果您将值存储为毫秒或YYYY/MM/DD HH:mm:ss,您还可以在ORDER BY YOURTABLEROWWHICHINCLUDESTHEDATES ASC - 查询中添加SQL