2014-02-14 3 views
2

Это может быть аналогичный вопрос, который я нашел в StackOverFlow. Но у меня немного другая ситуация, чем у всех. В моей базе данных у меня есть дата и время начала. Я хочу, чтобы система сравнивала дату и время отдельно, потому что дата и время запуска находятся в отдельных столбцах в базе данных. Сначала система сравнивает дату, а затем время. Другое действие должно открываться только в том случае, если дата такая же, а время до 15 минут - время начала в базе данных. Я сделал это до сих пор;Сравните Системную дату и время отдельно от базы данных дата и время, чтобы начать другую деятельность

private void startTraining() { 
    Calendar calendar1 = Calendar.getInstance(); 
    SimpleDateFormat formatter = new SimpleDateFormat("MM-dd-yyy"); 

    String currentDate = formatter.format(calendar1.getTime()); 
    System.out.println(currentDate); 

    Calendar calendar2 = Calendar.getInstance(); 
    SimpleDateFormat formatter2 = new SimpleDateFormat("hh:mm"); 

    String currentTime = formatter2.format(calendar2.getTime()); 
    System.out.println(currentTime); 

    String trainingStartDate = SharedMemory.getInstance() 
      .getCurrentTraining().getDate(); 

    String trainingStartTime = SharedMemory.getInstance() 
      .getCurrentTraining().getStartTime(); 
    int difference = trainingStartTime.compareTo(currentTime); 

    System.out.println(difference); 
    //System.out.println(trainingStartTime); 


    if (currentDate.toString().equals(trainingStartDate)&& difference < 15) { 

     Log.i("Debug", "CHECKPOINT"); 
     Intent intent = new Intent(getApplicationContext(), 
       TraineeListActivity.class); 
     MainActivity.this.startActivity(intent); 

     finish(); 
    } else{ 

    } 

} 

Я не получаю результат, которого ожидаю. Заранее спасибо.

+0

пожалуйста разместим ваш полный код ... а также журнал кот ... это помогает лучше понять ошибку –

+0

Вы использовали 'String.compareTo()', который не является правильным для этого случая. Лучший способ - конвертировать оба в «Календарь» и выполнять манипуляции с ними. –

+0

Здесь нет никаких ошибок. Здесь код работает, чтобы сравнить дату, а не время. Другое мероприятие открывается в ту же дату, но не в точное время, за исключением того, что я за исключением – bShah

ответ

0

Вы сравниваете время "String", что не будет работать. Попробуйте изменить код этого

private void startTraining() throws ParseException { 
    // current date & time 
    Calendar now = Calendar.getInstance(); 

    // parse date & time from database 
    String trainingStartDate = SharedMemory.getInstance() 
     .getCurrentTraining().getDate(); 
    String trainingStartTime = SharedMemory.getInstance() 
     .getCurrentTraining().getStartTime(); 
    String strDateTime = trainingStartDate + " " + trainingStartTime; 

    Calendar training = Calendar.getInstance(); 
    training.setTime(new SimpleDateFormat("MM-dd-yyyy kk:mm") 
     .parse(strDateTime)); 

    // find difference in milliseconds 
    long difference = training.getTimeInMillis() - now.getTimeInMillis(); 

    if (difference < 15 * 60 * 1000) { //less than 15 minutes 
     Log.i("Debug", "CHECKPOINT"); 
     Intent intent = new Intent(getApplicationContext(), 
      TraineeListActivity.class); 
     MainActivity.this.startActivity(intent); 

     finish(); 
    } else { 

    } 
} 
+0

Можете ли вы PLZ немного объяснить, как он сравнивает дату из моей базы данных, поскольку она не работает должным образом. – bShah

+0

Мой плохой, на самом деле не дата, а время. Поскольку вы только сравниваете дату с сегодняшней датой, текст должен быть таким же, поэтому использование 'String.equals()' ** может работать **, если использовать используемую локаль. ('String.equals()' проверяет символ 1 на 1). Однако, когда вы используете 'String.compareTo()' для времени, вы получите только -1, 0 или 1, так как это сравнение строк: -1, если проверочная строка находится перед другой строкой в ​​индексе словаря. 0, если тот же, и 1, если после. –

+0

Можно ли сравнить дату в этом уравнении ** Разница <15 * 60 * 1000 ** – bShah

Смежные вопросы