2012-08-06 66 views
3

为什么javax.xml.datatype.Duration.getMinutes()始终返回0,但持续时间递增?如果超过一分钟运行下面长的代码,你会看到这样的输出:javax.xml.datatype.Duration仅返回秒

minutes: 0 , seconds: 61 

我从来没有使用过这个类。我错过了一些关于它的基本知识吗? 下面是代码:

import java.util.Timer; 
import java.util.TimerTask; 

import javax.xml.datatype.DatatypeConfigurationException; 
import javax.xml.datatype.DatatypeFactory; 
import javax.xml.datatype.Duration; 

public class TestDuration { 

    class MyTimerTask extends TimerTask { 
     DatatypeFactory df; 
     long delay; 
     Duration duration; 

     public MyTimerTask(DatatypeFactory df, long delay) { 
      this.df = df; 
      this.delay = delay; 
      duration = df.newDuration(0); 
     } 

     @Override 
     public void run() { 
      duration = duration.add(df.newDuration(delay)); 
      System.out.println("minutes: " + duration.getMinutes() + " , seconds: " + duration.getSeconds()); 
     } 
    } 

    public static void main(String[] args) { 
     Timer timer = new Timer(); 
     final long delay = 1 * 1000; 
     DatatypeFactory df = null; 

     try { 
      df = DatatypeFactory.newInstance(); 
     } catch (DatatypeConfigurationException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 

     MyTimerTask task = new TestDuration().new MyTimerTask(df, delay); 
     timer.schedule(task, 0, delay); 
    } 
} 

回答

2

这是由设计看起来。看看JavaDoc的Duration.add()

计算一个新的持续时间,其值是+ rhs。

例如,

"1 day" + "-3 days" = "-2 days"
"1 year" + "1 day" = "1 year and 1 day"
"-(1 hour,50 minutes)" + "-20 minutes" = "-(1 hours,70 minutes)"
"15 hours" + "-3 days" = "-(2 days,9 hours)"
"1 year" + "-1 day" = IllegalStateException

我的底气是,这里重要的线。显然,这门课只关心正确表示时间间隔,而不是担心从“人”的角度来看有什么意义。

根据您的使用情况,您可以继续使用Duration,但需要在向用户显示值之前执行格式计算,或者您应该移动到不同的类,以达到您期望的效果当你执行加/减法时。一个例子可能是Yoda Time项目中的DurationPeriod类。

+0

谢谢。我浏览了文档,但可能没有足够注意。我一定对这堂课太过期待。 – ka3ak 2012-08-06 11:50:50