是否存在以分钟(或任何其他)
获得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合作。
答案 0 :(得分:9)
由于Period
是由单个组件字段(例如5年,7周)定义的,因此它们不能(轻松)直接转换为分钟值,而无需先将它们与特定时刻相关联。
例如,如果您有2个月的时间,它包含多少分钟?为了知道这一点,你需要知道哪两个月。也许:
其中每一个都会有不同的分钟数。
考虑到这一点,有几种方法可以解决这个问题。这是一对夫妇:
如果您保证您的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,因为此句点包含的月份和月份长度各不相同
否则,您可以及时关联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")
请注意,#2将根据代码运行的日期打印不同的值。但这只是它的本质。
作为替代方案,您可以考虑从一开始就使用Duration
(如果可能),而根本不使用Period
。
答案 1 :(得分:3)
是的,您可以轻松地从Joda-Time Period对象获取分钟数。
int minutes = Minutes.standardMinutesIn( period ).getMinutes();
答案 2 :(得分:1)
您可以尝试(double) period.getMillis()/60000
并重新格式化。