Jodatime开始一天和一天结束

nha*_*man 46 java android jodatime

我想在一周的开头和当周的结束之间创建一个间隔.

我从以下答案中借鉴了以下代码:

private LocalDateTime calcNextSunday(LocalDateTime d) {
    if (d.getDayOfWeek() > DateTimeConstants.SUNDAY) {
        d = d.plusWeeks(1);
    }
    return d.withDayOfWeek(DateTimeConstants.SUNDAY);
}

private LocalDateTime calcPreviousMonday(LocalDateTime d) {
    if (d.getDayOfWeek() < DateTimeConstants.MONDAY) {
        d = d.minusWeeks(1);
    }
    return d.withDayOfWeek(DateTimeConstants.MONDAY);
}
Run Code Online (Sandbox Code Playgroud)

但现在我希望周一LocalDateTime是00:00:00,周日LocalDateTime是23:59:59.我该怎么做?

Jod*_*hen 141

您可以使用以下withTime方法:

 d.withTime(0, 0, 0, 0);
 d.withTime(23, 59, 59, 999);
Run Code Online (Sandbox Code Playgroud)

与彼得的答案相同,但更短.

  • 也可以使用_d.withTimeAtStartOfDay()_获取当天的开头 (49认同)
  • `withTimeAtStartOfDay()`不适用于`LocalDateTime`,但可用于[`DateTime`](http://joda-time.sourceforge.net/apidocs/org/joda/time/DateTime.html#withTimeAtStartOfDay( )) (15认同)
  • 请记住,使用这种方法,您每天都会丢失一毫秒.我建议在那天结束时使用`d.plusDays(1).withTime(0,0,0,0)`. (7认同)
  • 更好地使用`plusDays(1).withTime(0,0,0,0)`方法,因为@Feuermurmel指出,因为它适用于闰秒,2015-06-30T23:59:60 (5认同)
  • 注意日光.最好使用`d.millisOfDay().withMaximumValue();` (5认同)

The*_*ger 84

也是一个简单的方法

d.millisOfDay().withMaximumValue();

  • 这应该是可接受的答案,与其他答案相比,在性能方面是最好的(因为DateTime是不可更改的,所创建的对象较少).使用MaximunValue文档的方法甚至说是完成问题所要求的最佳方法 (11认同)

Pet*_*son 23

怎么样:

private LocalDateTime calcNextSunday(LocalDateTime d) {
    return d.withHourOfDay(23).withMinuteOfHour(59).withSecondOfMinute(59).withDayOfWeek(DateTimeConstants.SUNDAY);
}

private LocalDateTime calcPreviousMonday(final LocalDateTime d) {
    return d.withHourOfDay(0).withMinuteOfHour(0).withSecondOfMinute(0).withDayOfWeek(DateTimeConstants.MONDAY);
}
Run Code Online (Sandbox Code Playgroud)

  • 按照惯例,`setXxx`在Java中没有返回类型,所以它不允许链接.这里提醒了构建器模式(最初不适用于现有对象). (4认同)
  • 的确。这使您可以将调用串在一起,而不是将它们全部放在不同的行上,并让您获得不可变对象的所有好处。 (2认同)
  • 我在2006年写了"with"动词 - http://blog.joda.org/2006/05/immutable-pojos-improving-on_6406.html并在2011年更新了 - http://blog.joda.org/ 2011/08/common-java-method-names.html.不可变的setter在使用它们方面与普通的setter非常不同(你必须使用返回值). (2认同)