在Java中只处理小时和分钟的最佳方法

时间:2015-01-08 19:11:28

标签: java time

我有一个管理对象的应用程序,其中每个对象与一个类相关联,并且具有在一天的特定时间执行命令的顺序,例如一次在上午9点,另一个在下午2点。我的问题是:在java中只处理时间的最佳方法是什么?我正在使用日历和时间课程,但我必须强制要求年,月,日,这对我来说是无法使用的数据。我的帐户通过处理日期的对象操纵事件计划并不是最佳的,那么我可以这样做吗?

5 个答案:

答案 0 :(得分:8)

约达时间

使用Joda Time,特别是LocalTime

LocalTime time = new LocalTime(12, 20);

java.time

同样,Java 8中内置的java.time包也提供了LocalTime类。

答案 1 :(得分:0)

那里有一些非常强大的东西 Joda Time它为Java日期和时间类提供了高质量的替代。

答案 2 :(得分: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;
    }
  }
}

答案 3 :(得分: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
}

答案 4 :(得分:0)

调度操作的最佳解决方案是cron4j