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