2016-03-14 3 views
2

Я хочу проверить, перекрываются ли домены моих событий. Я сохранил время начала и время окончания в формате даты. Моя попытка - проверить, не совпадают ли даты или нет. Но иногда это терпит неудачу.Почему сравнение даты не удается?

В большинстве случаев это происходит с 11:00 до 12:00 и с 12:00 до 1:00 утра. Иногда между ними также возникают другие периоды времени.

Поскольку у меня есть период времени хранится в виде,

datefrom - Пн мар 14 23:00:00 dateto - пн 14 марта 00:00:00

и теперь я пытался добавить период времени, как:

checkFromDate - пн 14 марта 12:14:00 checkToDate - Пн мар 14 11:14:00

и возвращает истину. Показывает событие, хотя оно не дозу.

Дата Формат:

 df = new SimpleDateFormat("E MMM dd HH:mm:ss zzzz yyyy"); 

ли что-то неправильно в формате даты ??

функция checkOverlapping

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)); 

     } 

    } 

Эта доза не поможет, так что я думал, что только сравнить часы и минуты дня. Моя попытка заключалась в часах и минутах от даты и сравнить их, это в комментариях. Но для этого нужна другая логика.

Может ли кто-нибудь помочь мне с этим, пожалуйста?

EDIT:

Как я снова сделал тест, я обнаружил, что если когда-то условие возвращает истинный, то во второй раз в течение другого периода времени, и это показывает, правда, хотя его не так.

Как и сейчас, у меня есть событие с 12:50 вечера по 1:50 вечера, и я попытался добавить еще одно событие времени 12:00 pm - 1:00 вечера, и это вернулось, счет равен 1. Это правильно ,

Но опять же, если я попытаюсь изменить время, не возвращаясь, не обновляя действие, я попытался изменить время с 12:00 до 12:30 для этого, и он вернул true, count равен 1, поскольку это не должно быть true, нет события этого периода времени.

Снова, если я вернусь и снова. Если я попытаюсь добавить событие с 12:00 до 12:30, оно вернется к ошибке, оно будет добавлено успешно. Теперь я не знаю, о чем идет речь?

Мне кажется, мне нужно обновить список, где хранятся сравниваемые события. Как я могу это сделать и где я должен это делать?

спасибо.

+0

Пробуйте использовать функции формата даты, такие как .befor или .after или .equals. Я могу это помочь вам –

+0

можно ли мне помочь мне через код? @RakshitNawani – Sid

+0

Я тоже пробовал это - startDate1.before (endDate2) && startDate2.before (endDate1); – Sid

ответ

0

Допустим даты, как это:

Пн мар 14 12:14:00

ваш формат должен быть, как этот

SimpleDateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss"); 

Вы только что ввели один E на ваш рабочий деньОфиск

EDIT:

SimpleDateFormat действует как парсер. каждый параметр, который вы используете в нем, указывает, как должен себя вести парсер.

Давайте обратно к примеру я имею в виду >>> пн 14 марта 12:14:00

Если вы используете это:

SimpleDateFormat df = new SimpleDateFormat("E MMM dd HH:mm:ss"); 

Скажешь анализатору, что только первый символ строки указывает DayNameInTheWeek. в нашем примере он принимает M в качестве индикатора для дня недели. который не идентичен для Date. В какой день недели я обращаюсь к?!?!?!?! Поддерживаемые форматы параметры в примере колонки:

enter image description here

Как видно наименее приемлемой длины для дня недели 3 как ДФЭ, MON, FRI, и т.д. ...

+0

Что изменится в сравнении? @Smartiz – Sid

+0

Я отредактировал свой ответ, чтобы сделать его более понятным @ Sid –

0

Если вам имеют два диапазона дат: start1 - end1 и start2 - end2, и вы хотите посмотреть, пересекаются ли они, попытайтесь взглянуть на него с другой стороны.

Проверьте, не совпадают ли . Если один из них заканчивается перед стартом другого, они не перекрывают друг друга:

end1 <= start2 or end2 <= start1 

Отрицание, что, чтобы увидеть, если они перекрывают друг друга, дают нам:

end1 > start2 and end2 > start1 

Или в Java с Date объектами, он становится:

if (end1.after(start2) && end2.after(start1)) 
+0

, пожалуйста, проверьте отредактированный вопрос. @ Andreas – Sid

1

Может быть, я недоразумение вопрос, но время 00:00:00 является ДО 23:00:00. Я проверил его, чтобы убедиться:

SimpleDateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss"); 
    System.out.println(df.parse("Mon mar 14 23:00:00").getTime()); // 6296400000 
    System.out.println(df.parse("Mon mar 14 00:00:00").getTime()); // 6213600000 

Из-за этого, даты ПН 14 марта 12:14:00 - 14 марта пн 11:14:00 будет существовать между ПН 14 марта 00:00:00 - - Пн мар 14 23:00:00.

Таким образом, код может быть правильным, ваш тест просто запутан.

+0

, то как я могу добавить событие с 23:00 до 12:00? иногда это показывает правду с 11:00 вечера до 11:50 вечера, и я не понимаю, что случилось. – Sid

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