使用joda库汇总日期时间

时间:2012-10-04 16:01:09

标签: java jodatime

我正在寻找一种使用Joda时间库来舍入日期时间值的方法。 只有当间隔在60秒内到达下一个圆形小时时,我才需要这样做。

例如向上舍入:

10/1/2012 10:59:00 => 10/1/2012 11:00:00
10/1/2012 10:59:01 => 10/1/2012 11:00:00
10/1/2012 10:59:59 => 10/1/2012 11:00:00
10/1/2012 10:49:59 => 10/1/2012 10:49:59 (no rounding needed)

3 个答案:

答案 0 :(得分:2)

您的base日期时间必须缩短为几小时。让我们将此操作的结果称为product。然后加入产品一小时。在此之后,您需要使用base(产品 - 基础)来减去产品,该产品将提供difference

如果差异小于61秒你设置产品,否则你离开基地。

编辑:

或者您可以检查您的日期是否为59分钟,并为其添加一分钟并设置

if(dateTime.getMinuteOfHour() == 59) {
  dateTime.addMinutes(1);
  dateTime.setSecondOfMinute(0);
  dateTime.setMillisOfSecond(0);
}

答案 1 :(得分:1)

您可以在以下代码段中执行以下操作:

DateTime input = new DateTime(2012, 10, 04, 21, 39, 0, 0);
DateTime dateTime = new DateTime();
long diffInSeconds =
    dateTime.minus(input.getMillis()).getMillis() / 1000;
if (diffInSeconds <= 60)
{
    input = input.plus(diffInSeconds * 1000);
}

答案 2 :(得分:1)

这应该这样做:

DateTime round = new DateTime().withTime(23, 59, 0, 0)

DateTime temp = round.plusMinutes(1);
if(temp.getHourOfDay()!=round.getHourOfDay())
    round = new DateTime(temp.withTime(temp.getHourOfDay(),0,0,0));