Joda-时间都在几分钟内

时间:2012-01-09 18:45:10

标签: java jodatime

是否存在以分钟(或任何其他)

获得Joda-Time期的隐藏方式

现在我做:

(period.getHours()*60 + period.getMinutes() + roundTwoDecimals((double)(period.getSeconds()/60)))
double roundTwoDecimals(double d) {
        DecimalFormat twoDForm = new DecimalFormat("#.##");
    return Double.valueOf(twoDForm.format(d));
}

但出于某种原因,我认为可能有一种更简单的方法。

编辑:我的时间将是最长时间,永远不会是几天。这是我第一次和Joda-Time合作。

3 个答案:

答案 0 :(得分:9)

由于Period是由单个组件字段(例如5年,7周)定义的,因此它们不能(轻松)直接转换为分钟值,而无需先将它们与特定时刻相关联。

例如,如果您有2个月的时间,它包含多少分钟?为了知道这一点,你需要知道哪两个月。也许:

  • 六月和七月? (30 + 31 = 61天)
  • 七月和八月? (31 + 31 = 62天)
  • 闰年2月和3月? (29 + 31 = 60天)

其中每一个都会有不同的分钟数。

考虑到这一点,有几种方法可以解决这个问题。这是一对夫妇:

  1. 如果您保证您的Period不会包含月份(或更高),则可以使用toStandardSeconds()

    Period period = new Period(60, 40, 20, 500);
    System.out.println(period.toStandardSeconds().getSeconds() / 60.0);
    
    // outputs 3640.3333333333335
    

    但是,如果您最终在Period中获得月份值,则会获得UnsupportedOperationException个{javadoc}:

      

    java.lang.UnsupportedOperationException:无法转换为Seconds,因为此句点包含的月份和月份长度各不相同

  2. 否则,您可以及时关联Period并使用Duration

    Period period = new Period(1, 6, 2, 2, 5, 4, 3, 100);
    
    // apply the period starting right now
    Duration duration = period.toDurationFrom(new DateTime());
    
    System.out.println(duration.toStandardSeconds().getSeconds() / 60.0);
    
    // outputs 810964.05 (when right now is "2012-01-09T13:36:43.880-06:00")
    
  3. 请注意,#2将根据代码运行的日期打印不同的值。但这只是它的本质。

    作为替代方案,您可以考虑从一开始就使用Duration(如果可能),而根本不使用Period

答案 1 :(得分:3)

是的,您可以轻松地从Joda-Time Period对象获取分钟数。

int minutes = Minutes.standardMinutesIn( period ).getMinutes();

答案 2 :(得分:1)

您可以尝试(double) period.getMillis()/60000并重新格式化。