与Joda一起向上或向下舍入时间

时间:2014-01-21 20:32:50

标签: java jodatime

我希望使用roundCeilingCopyroundFloorCopy方法向Joda上下调整一次。

向下舍入似乎正常,但是当我尝试向上舍入时,它无法正常工作。

下面是我当前的输出和所需输出的代码。但也许我只是不明白这些joda方法是如何工作的?

我是java和joda的新手,并从here

获取了原始代码

代码:

public static long RoundTime(long time, int amount) {
    DateTime dt = new DateTime(time);
    System.out.println("Rounding time: " + dt.toString());

    DateTime up = dt.withMinuteOfHour((dt.getMinuteOfHour() / amount) * amount)
        .minuteOfDay().roundCeilingCopy();
    System.out.println("Finished Rounding Time Up (" + amount + "): "
        + up.toString());

    DateTime down = dt.withMinuteOfHour((dt.getMinuteOfHour() / amount) * amount)
        .minuteOfDay().roundFloorCopy();
    System.out.println("Finished Rounding Time Down (" + amount + "): " 
        + down.toString());

}

输出:(金额= 5)

Rounding time: 2014-01-21T13:12:00.000-07:00
Finished Rounding Time Up (5): 2014-01-21T13:10:00.000-07:00
Finished Rounding Time Down (5): 2014-01-21T13:10:00.000-07:00

期望输出:(金额= 5)

Rounding time: 2014-01-21T13:12:00.000-07:00
Finished Rounding Time Up (5): 2014-01-21T13:15:00.000-07:00
Finished Rounding Time Down (5): 2014-01-21T13:10:00.000-07:00

1 个答案:

答案 0 :(得分:1)

(dt.getMinuteOfHour() / amount) * amount已将分钟向零舍入,因为它使用整数除法。你必须修改它来获得ceiled值:((int) Math.ceil(1. * dt.getMinuteOfHour() / amount) * amount(注意1. *强制表达式使用双精度 - 你也可以将任何值转换为double。)