2015-01-08 4 views
1

У меня есть приложение, которое управляет объектами, где каждый объект связан с классом, и имеет порядок выполнения команд в определенное время суток, например один раз в 9 утра, другой в 2 часа дня , Мой вопрос: какой лучший способ обрабатывать только раз в java? Я использую классы «Календарь» и «Время», но я должен обязательно предоставлять год, месяц, день, которые для меня являются непригодными для использования данными. Моя учетная запись управляет расписаниями событий через объект, который обрабатывает даты, не является оптимальной, то как я могу это сделать?лучший способ обрабатывать только часы и минуты в Java

+0

Если вам не нравится существующий 'Calendar' или' date' классы, вы всегда можете написать свой собственный класс 'Time', который будет делать именно то, что вам нужно. –

+0

Я думаю, что у Java 8 есть понятие «время» только класс ... – MadProgrammer

ответ

7

Joda времени

Использование Joda Time, в частности LocalTime.

LocalTime time = new LocalTime(12, 20); 

java.time

Аналогично, пакет java.time встроенный в Java 8 также предлагает LocalTime класс.

+2

Или, если вы используете Java 8, используйте ['java.time.LocalTime'] (http://docs.oracle.com/javase /8/docs/api/java/time/LocalTime.html). – Jesper

0

Есть что-то действительно мощное там называется Joda Time оно обеспечивает качественную замену классов даты и времени Java.

+1

Ответ наумчо уже упоминает время Джоды. Вам не нужно повторять ответ. – mbomb007

+0

Хех, я не заметил обновления: D –

0

Может быть, вы могли бы использовать пользовательские Comparator Заказы Календарей или время занятия только полями вы желаете:

class HourMinuteComparator implements Comparator<Calendar> { 
    public int compare(Calendar c1, Calendar c2) { 
    int hour1 = c1.get(Calendar.HOUR_OF_DAY); 
    int hour2 = c2.get(Calendar.HOUR_OF_DAY); 
    if (hour1 == hour2) { 
     int minute1 = c1.get(Calendar.MINUTE); 
     int minute2 = c2.get(Calendar.MINUTE); 
     return minute2 - minute1; 
    } else { 
     return hour2 - hour1; 
    } 
    } 
} 
+0

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

0

очень хороший ответ naumcho, но, к сожалению, я не могу использовать эту версию Java. Наконец-то я в конечном итоге создать свой собственный класс:

public class Tiempo { 
    public Integer hora; 
    public Integer minuto; 
    public Integer segundo; 

    public Tiempo(){} 

    public Tiempo(String tiempo){ 
     this.parse(tiempo); 
    } 

    /** 
    * Convierte un tiempo de tipo String a formato Tiempo 
    * @param tiempo Tiempo en formato HH:mm:ss (24 horas) 
    * @return Retorna true si fué convertido correctamente, en caso contrario retorna false. 
    */ 
    public Boolean parse(String tiempo){ 
     try{ 

      this.hora = Integer.parseInt(tiempo.split(":")[0]); 
      this.minuto = Integer.parseInt(tiempo.split(":")[1]); 
      this.segundo = Integer.parseInt(tiempo.split(":")[2]); 

      Boolean valido = (
       (this.hora >= 0) && 
       (this.hora <= 23) && 
       (this.minuto >= 0) && 
       (this.minuto <= 59) && 
       (this.segundo >= 0) && 
       (this.segundo <= 59) 
      ); 

      if(valido){ 
       return true; 

      }else{ 
       this.hora = null; 
       this.minuto = null; 
       this.segundo = null; 

       return false; 
      } 


     }catch(Exception e){ 
      this.hora = null; 
      this.minuto = null; 
      this.segundo = null; 

      return false; 
     } 
    } 

    /** 
    * 
    * @param a Tiempo a comparar 
    * @param b Tiempo a comparar 
    * @return Retorna un número negativo si a es menor que b, retorna 0 si son iguales, retorna un número positivo si a es mayor que b, retorna null si uno de ambos tiempos era nulo 
    */ 
    static public Integer comparar(Tiempo a, Tiempo b){ 

     if((a == null) || (b == null)){ 
      return null; 
     } 

     if(a.hora < b.hora) { 
      return -1; 

     }else if(a.hora == b.hora){ 

      if(a.minuto < b.minuto){ 
       return -2; 

      }else if(a.minuto == b.minuto){ 

       if(a.segundo < b.segundo){ 
        return -3; 

       }else if(a.segundo == b.segundo){ 

        return 0; 

       }else if(a.segundo > b.segundo){ 
        return 3; 
       } 

      }else if(a.minuto > b.minuto){ 
       return 2; 
      } 

     }else if(a.hora > b.hora){ 
      return 1; 
     } 

     return null; 
    } 
} 

Использование:

Tiempo a = new Tiempo("09:10:05"); 
Tiempo b = new Tiempo("15:08:31"); 

if(Tiempo.compare(a, b) < 0){ 
// a < b 
} 
0

Лучшее решение для операций планирования будет cron4j

+0

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

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