Java 乔达时间都在几分钟内
是否有一种以分钟(或任何其他形式)为单位获取句点的隐藏方式 现在我有:Java 乔达时间都在几分钟内,java,jodatime,Java,Jodatime,是否有一种以分钟(或任何其他形式)为单位获取句点的隐藏方式 现在我有: (period.getHours()*60 + period.getMinutes() + roundTwoDecimals((double)(period.getSeconds()/60))) double roundTwoDecimals(double d) { DecimalFormat twoDForm = new DecimalFormat("#.##"); return Double.va
(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。您可以尝试
(双)period.getMillis()/60000
并重新格式化。由于period
是由单个组件字段定义的(例如5年、7周),因此它们不能(轻松)直接转换为,分钟值,而不首先将其与特定时间点关联
例如,如果您有2个月的时间段,它包含多少分钟?为了知道这一点,你需要知道哪两个月。也许:
- 六月和七月?(30+31=61天)
- 七月和八月?(31+31=62天)
- 闰年的二月和三月?(29+31=60天)
期间不包含月(或更高),您可以使用:
但是,如果您在期间结束时有一个月值
,您将(根据javadoc)得到一个不支持操作异常
:
java.lang.UnsupportedOperationException:无法转换为秒,因为此期间包含月份,且月份长度不同
时段
与时间上的某个瞬间关联,并使用:
作为另一种选择,您可以考虑从开始时使用<代码>持续时间< /代码> s,而不使用<代码>期限< />代码> .< /p>
是的,您可以轻松地从JoDA时间对象获得分钟。
这将只返回周期的毫秒分量,而忽略其他字段。为了澄清,执行
新周期(1、6、2、2、5、4、3、100)。getMillis()
将只返回100
,而不返回周期的完整长度(即求和字段).一段时间内的分钟数取决于它与特定时间点的关联。如果这段时间跨越闰年或闰秒呢?结果值会有所不同。你可以用a来代替吗?为了得到一些澄清,请看和。感谢这些链接,即使我这次没有使用持续时间,它们也提供了宝贵的知识。我的程序“持续时间”只有几分钟到几小时,阅读答案似乎我从一开始就应该使用持续时间。但考虑到这已经写好了,你认为方法#1只是一个简单的解决方案吗?最后一个问题是,如果我使用句点.toStandardminutes(),这不是更简单吗?不需要加上或乘以小时数。@Juan-#1可能是一个很好的解决方案,适合您的情况;为了避免意外的不支持操作异常
),如果他们碰巧潜入,在它周围添加一个检查数月可能不会有什么坏处。至于toStandardMinutes()
:我使用秒是因为A)我不确定toStandardMinutes()
是否会截断部分秒,以及B)是否需要这些部分秒。如果您对截断没意见,那么使用toStandardMinutes()
可能没问题。@Juan-“尝试过……但没用”-怎么做?你能用你尝试过的代码更新你的问题吗?结果,以及为什么它不是预期的?好的,工作。之前的陈述似乎有点错误。使用:roundTwoDecimals((double)(period.toStandardSeconds().getSeconds())/60)我不得不保留roundTwoDecimals并将其转换为double,但更好的是,这个被接受的答案是不必要的复杂。查看该类,如中所示。一行简单的代码。
Period period = new Period(60, 40, 20, 500);
System.out.println(period.toStandardSeconds().getSeconds() / 60.0);
// outputs 3640.3333333333335
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")
int minutes = Minutes.standardMinutesIn( period ).getMinutes();