Сравнение только компонента времени Date - PullRequest
1 голос
/ 09 августа 2011

Рассмотрим следующий код, чтобы определить, находится ли компонент времени одного объекта Date раньше, чем компонент времени другого объекта Date:

private boolean validStartStopTime( Date start, Date stop ) {
  Calendar startCal = Calendar.getInstance();
  Calendar stopCal = Calendar.getInstance();

  startCal.clear();
  stopCal.clear();

  startCal.setTime( start );
  stopCal.setTime( stop );

  startCal.set( Calendar.YEAR, 2011 );
  stopCal.set( Calendar.YEAR, 2011 );
  startCal.set( Calendar.MONTH, 1 );
  stopCal.set( Calendar.MONTH, 1 );
  startCal.set( Calendar.DAY_OF_YEAR, 1 );
  stopCal.set( Calendar.DAY_OF_YEAR, 1 );

  return startCal.before( stopCal );
}

Будет ли это гарантировать, что сравнение по времени является правильным?Есть ли лучшая альтернатива ( Йода не вариант )?Я полагаю, что это эквивалентно установке Calendar объектов на текущую дату / время и ручному копированию в течение часа, минут и миллисекунд.Вы можете предположить, что часовой пояс одинаков.

РЕДАКТИРОВАТЬ: Чтобы уточнить, что я имею в виду, сравнивая только компонент времени объекта Date.Я имею в виду, что если смотреть конкретно на отрезок времени, время начала предшествует времени останова.Часть даты АБСОЛЮТНО не имеет значения (в этом случае start = "Jan 2 20011 10AM" и end = "1 Jan 2011 11AM" совершенно нормально), если бы у меня был выбор, я бы просто использовал что-то, содержащее только время, но Date объект - это то, что мне дали.Я бы не хотел писать последовательность if-else, поэтому у меня есть подход выше, но я приветствую более чистый / лучший подход.

Ответы [ 2 ]

9 голосов
/ 09 августа 2011

Ваш код должен работать нормально. Вы также можете отформатировать только компоненты времени в строковой нотации с нулями и сравнить их лексикографически:

public static boolean timeIsBefore(Date d1, Date d2) {
  DateFormat f = new SimpleDateFormat("HH:mm:ss.SSS");
  return f.format(d1).compareTo(f.format(d2)) < 0;
}

[Изменить]

Предполагается, что даты имеют одинаковое смещение часового пояса. Если нет, вам придется настроить их вручную заранее (или как часть этой функции).

3 голосов
/ 09 августа 2011

В день 86 400 000 миллисекунд, почему бы просто не использовать это, чтобы понять это?Вы можете просто изменить время в миллисекундах с этим числом и сравнить результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...