开始时认为很简单,用一个Timer就ok了嘛,过一秒加以秒钟,没想到后来接连遇到了麻烦,因为当从
23:59:59到00:00:00不会跳转,始终无法正确实现,代码如下: 设定时钟h=23,m=21,s=12(即从23:21:12开始运转)
Timer timer=new Timer(1000,new ActionListener(){public void actionPerformed(ActionEvent e){
s=(s+1)%60;
if(s==0){
m=(m+1)%60
}
if(m==0){
if(h==23){
h=0 ;
}
}
}});这样没到类似23:59:59的时刻就会发生时刻错乱,这因该是我考虑不全的缘故。到底如何完善这种算法呢?
我真在寻找答案。后来在翻看api 文档时,无意中看到了 Calendar类,我又想,能不能借助他来实现这一功能呢?
可以先获取一个实例,在设定它的小时,分钟,秒钟。但他不能自己按秒走啊,怎么解决呢?有没有run方法让这
个实例从设定的时间开始运行呢?结果没找到这种run方法。后来想了半天,让我终于找到一种可以实现的方法!
思路是这样的,每隔一秒在日历实例的set方法的秒这个元素加一,这样当为60秒是,实例会自动加一分钟,并把秒
钟置为0.具体代码如下:
Calendar ca=Calendar.getInstance();
int h=23,m=21,s=12;
Timer timer=new Timer(1,new ActionListener(){
public void actionPerformed(ActionEvent event){
ca.set(2011, 6, 2, 23, 59, s++);
System.out.println("..."+ca.get(Calendar.HOUR_OF_DAY)+"时"
+ca.get(Calendar.MINUTE)+"分"+ca.get(Calendar.SECOND)
+"秒");
}
});
总结:进位问题没有解决,最后不得不借助日历类来实现,不知各位大虾有没有更好的算法?
23:59:59到00:00:00不会跳转,始终无法正确实现,代码如下: 设定时钟h=23,m=21,s=12(即从23:21:12开始运转)
Timer timer=new Timer(1000,new ActionListener(){public void actionPerformed(ActionEvent e){
s=(s+1)%60;
if(s==0){
m=(m+1)%60
}
if(m==0){
if(h==23){
h=0 ;
}
}
}});这样没到类似23:59:59的时刻就会发生时刻错乱,这因该是我考虑不全的缘故。到底如何完善这种算法呢?
我真在寻找答案。后来在翻看api 文档时,无意中看到了 Calendar类,我又想,能不能借助他来实现这一功能呢?
可以先获取一个实例,在设定它的小时,分钟,秒钟。但他不能自己按秒走啊,怎么解决呢?有没有run方法让这
个实例从设定的时间开始运行呢?结果没找到这种run方法。后来想了半天,让我终于找到一种可以实现的方法!
思路是这样的,每隔一秒在日历实例的set方法的秒这个元素加一,这样当为60秒是,实例会自动加一分钟,并把秒
钟置为0.具体代码如下:
Calendar ca=Calendar.getInstance();
int h=23,m=21,s=12;
Timer timer=new Timer(1,new ActionListener(){
public void actionPerformed(ActionEvent event){
ca.set(2011, 6, 2, 23, 59, s++);
System.out.println("..."+ca.get(Calendar.HOUR_OF_DAY)+"时"
+ca.get(Calendar.MINUTE)+"分"+ca.get(Calendar.SECOND)
+"秒");
}
});
总结:进位问题没有解决,最后不得不借助日历类来实现,不知各位大虾有没有更好的算法?