2014-10-25 2 views
0

У меня есть два объекта MyDate.Как проверить наличие временной метки даты в интервале времени

class MyDate { 

    public int hours, minutes; 

    MyDate(int hours, int minutes) { 
     this.hours = hours; 
     this.minutes = minutes; 
    } 
} 

MyDate startTime; 
MyDate endTime; 

и у меня есть метка времени как третий объект MyDate.

MyDate currentTime; 

Я хочу знать, currentTimeStamp включен или нет в интервале ENDDATE - STARTDATE

[------------[startTime]------------[currentTime]-----------------[endTime]--------------] 

Я вижу три комбинации времени:

  • 23:00 - 08:00 (07:00 - настоящая)
  • 12:00 - 13:00 (7:00 - ложь)
  • 23:59 - 23:58 (7:00 - правда)

Объяснить третий случай:

[-----------------(23:59)(00:00 - new Day)--(07:00)----------(23:58)--(00:00 - new Day)] 

Как я могу проверка currentTimeStamp включен или нет в интервале endDate - startDate?

+0

Есть ли причина, по которой вы не используете проверенную библиотеку времени, такую ​​как Jodatime, и вместо этого используете свои собственные даты? – Afforess

+0

@ Хочу, чтобы я реализовал это с любыми сторонними библиотеками. Это альгорифмическая проблема. –

+0

Чтобы выяснить, находится ли время внутри интервала, вам нужно проверить, если сначала, если дата равна _after_ времени начала и _before_ времени окончания. Если оба условия истинны, то дата находится внутри интервала. Создайте два метода: один, чтобы проверить, есть ли время до другого времени, а другое - проверить, будет ли время после другого времени, тогда проблема станет простой. – Afforess

ответ

0

Отправляя комментарии, с включенным решением.

Чтобы выяснить, если время находится внутри интервала вам нужно проверить, если первый, если дата после времени начала и до конца времени. Если оба условия истинны, то дата находится внутри интервала. Создайте два метода: один, чтобы проверить, есть ли время до другого времени, а другое - проверить, будет ли время после другого времени, тогда проблема станет простой.

class MyDate { 
    public int hours, minutes; 

    MyDate(int hours, int minutes) { 
     this.hours = hours; 
     this.minutes = minutes; 
    } 

    public boolean isBefore(MyDate date) { 
     if (date.hours < hours) { 
      return true; 
     } 
     if (date.hours == hours) { 
      return date.minutes < minutes; 
     } 
     return false; 
    } 

    public boolean isAfter(MyDate date) { 
     if (date.hours > hours) { 
      return true; 
     } 
     if (date.hours == hours) { 
      return date.minutes > minutes; 
     } 
     return false; 
    } 

    public static boolean isBetween(MyDate intervalStart, MyDate intervalEnd, MyDate time) { 
     return time.isAfter(intervalStart) && time.isBefore(intervalEnd); 
    } 
} 

Действительно, код времени и даты, как это, не должен существовать вне занятий. Есть огромное количество крайних случаев, когда речь идет о датах и ​​времени, и они лучше оставляются в проверенных библиотеках, таких как JodaTime.

+0

Этот код не работает вовремя 23:00 - 08:00 с отметкой времени 07:00 –

+0

Правильно, потому что ваше время занимает 2 дня, что вы не можете представлять только с часами и минутами. Именно поэтому вы должны оставить реализацию кода даты/времени для хорошо протестированных библиотек. – Afforess

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