是否有一种隐藏的方式可以在几分钟内(或任何其他)获得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合作.
由于Period
s是由单个组件字段(例如5年,7周)定义的,因此它们不能(容易地)直接转换为例如微小值而不首先将它们与特定时刻相关联.
例如,如果您有2个月的时间,它包含多少分钟?为了知道这一点,你需要知道哪两个月.也许:
其中每一个都会有不同的分钟数.
考虑到这一点,有几种方法可以解决这个问题.这是一对夫妇:
如果你保证你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,因为此句点包含的月份和月份长度各不相同
否则,您可以及时关联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(如果可能)而不使用Period
s.