jba*_*arz 11 java period jodatime
我有一个JodaTime Period,我是从两个DateTime时刻创建的.有没有一种方法可以将该期间转换为十进制小时数?
例如,我有一个时间段,从2010年1月1日下午1点到1点30分.我怎样才能将该时间段视为1.5小时.
在过去,我使用秒和BigDecimals手动转换,例如:
int seconds = myPeriod.toStandardSeconds().getSeconds();
BigDecimal d = new BigDecimal((double) seconds / 3600);
// Round to two decimals
BigDecimal correctResult = d.setScale(2, RoundingMode.HALF_DOWN);
Run Code Online (Sandbox Code Playgroud)
这种感觉就像一个黑客,当我开始将Periods加在一起时更别提尴尬了.似乎应该有更好的方法.
有任何想法吗?谢谢
Jon*_*eet 14
如果你有两个DateTimes,我希望你有一个Duration介于它们之间而不是Period......但除此之外和Mike的评论,看起来是正确的:
private static final BigDecimal SECONDS_PER_HOUR =
BigDecimal.valueOf(DateTimeConstants.SECONDS_PER_HOUR);
...
DateTime dt1 = ...;
DateTime dt2 = ...;
Duration duration = new Duration(dt1, dt2);
BigDecimal result = BigDecimal.valueOf(duration.toStandardSeconds().getSeconds())
.divide(SECONDS_PER_HOUR)
.setScale(2, RoundingMode.HALF_DOWN);
Run Code Online (Sandbox Code Playgroud)
请注意,您可以避免toStandardSeconds().getSeconds()使用Duration.getMillis():
private static final BigDecimal MILLIS_PER_HOUR =
BigDecimal.valueOf(DateTimeConstants.MILLIS_PER_HOUR);
...
DateTime dt1 = ...;
DateTime dt2 = ...;
Duration duration = new Duration(dt1, dt2);
BigDecimal result = BigDecimal.valueOf(duration.getMillis())
.divide(MILLIS_PER_HOUR)
.setScale(2, RoundingMode.HALF_DOWN);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6271 次 |
| 最近记录: |