Joda-时间都在几分钟内

Jua*_*uan 2 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));
}
Run Code Online (Sandbox Code Playgroud)

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

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

Rob*_*ska 8

由于Periods是由单个组件字段(例如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
    
    Run Code Online (Sandbox Code Playgroud)

    但是,如果你最终得到了一个月值Period,你将得到(根据javadoc)UnsupportedOperationException:

    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")
    
    Run Code Online (Sandbox Code Playgroud)

请注意,#2将根据代码运行的日期打印不同的值.但这只是它的本质.

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