2015-04-13 5 views
0

я написал программу с графическим интерфейсом, который содержит org.eclipse.swt.widgets.Datetime:Сравнить Java DATETIME с текущим временем

new DateTime(shell, SWT.BORDER | SWT.TIME); 

Пользователь может изменить его значение, чтобы выбрать определенное время. Затем он нажимает кнопку «отправить».

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

я получаю системное время с помощью java.util.calender:

Calendar cal = Calendar.getInstance(); 
cal.get(Calendar.HOUR_OF_DAY); 
cal.get(Calendar.MINUTE); 
cal.get(Calendar.SECOND)); 

Спасибо за вашу помощь !!

Сердечные приветы

+0

используете ли вы Java 8? – fge

+0

Пока нет. :/Но вы можете сказать мне более приятное решение с Java 8. Мне это интересно! Но для моей компании я еще не могу развиваться в Java 8 .. – mrbela

+0

вы можете минус 1,5 часа с текущей системной даты cal.add (Calendar.MINUTE, -90); затем сравните введенное пользователем значение с этой датой. –

ответ

1

Я хотел бы предложить вместо добавления кнопки для отправки время вы можете использовать SelectionListener, чтобы проверить, является ли время, которое было выбрано пользователем, является более или менее чем за 30 минут от настоящего времени. Вы можете посмотреть на следующий код:

DateTime timeSelection = new DateTime(shell, DateTime.TIME); 
timeSelection.addSelectionListener(new SelectionAdapter(){ 
    widgetSelected(SelectionEvent e){ 
     DateTime dateTime = (DateTime)(e.getSource()); 
     Calendar cal = Calendar.getInstance(); //Create a new instance of Calendar. 
     cal.clear(); //Clear all the default values of the calendar object. 
     cal.set(dateTime.getYear(), dateTime.getMonth(), dateTime.getDay(), dateTime.getHours(), dateTime.getMinutes(), dateTime.getSeconds()); 
     //Setting all the required fields of the calendar object to the user's selected values. 
     cal.add(Calendar.Minute,-30) //Reduce the user time by 30 minutes so that if we compare the user's time with current time +30 minutes. 
     if(cal.after(Calendar.getInstance())){ 
      //The selected time is more than 30 minutes after current time. 
     }else{ 
      //The selected time is less than current time + 30 minutes 
     } 
    } 
}); 
1
 DateTime dt = new DateTime(shell, SWT.BORDER | SWT.TIME); 

    { 
     // some method invoked to compare time difference 
     Calendar cal = Calendar.getInstance(); 
     cal.set(Calendar.YEAR, dt.getYear()); 
     cal.set(Calendar.MONTH, dt.getMonth()); 
     cal.set(Calendar.DAY_OF_MONTH, dt.getDay()); 
     cal.set(Calendar.HOUR, dt.getHours()); 
     cal.set(Calendar.MINUTE, dt.getMinutes()); 
     cal.set(Calendar.SECOND, dt.getSeconds()); 

     if (cal.getTimeInMillis() - System.currentTimeMillis() > 30 * 60 * 1000) { 
      // the time picked in the DateTime is more than half an hour in 
      // the future regarded to the current system time. 
     } 
    } 
0

Просто проверить, имеет ли ваш вновь созданный объект календаря значение времени больше, чем 1800000 вперед текущего времени (это 30 минут * 60 * 1000):

следующий метод возвращает истину, если время было установлено за свой лимит (в минутах):

public boolean isOutOfLimit(DateTime dateTime, long minutes) { 
    GregorianCalendar now = new GregorianCalendar(); 
    Calendar chosen = new GregorianCalendar(
      now.get(Calendar.YEAR), 
      now.get(Calendar.MONTH), 
      now.get(Calendar.DAY_OF_MONTH), 
      dateTime.getHours(), 
      dateTime.getMinutes(), 
      dateTime.getSeconds()); 
    long millisecs = minutes * 60L * 1000L; 
    return ((chosen.getTimeInMillis() - now.getTimeInMillis()) > millisecs) ? true : false; 
} 
Смежные вопросы