Jodatime开始的一天和一天的结束
我想创建一周之间和本周结束之间的时间间隔。Jodatime开始的一天和一天的结束
我有下面的代码,从this answer借:
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);
}
但现在我想周一LocalDateTime
是00:00:00,与Sunday LocalDateTime
在23:59:59。我将如何做到这一点?
如何:
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);
}
可以使用withTime
方法:
d.withTime(0, 0, 0, 0);
d.withTime(23, 59, 59, 999);
同彼得的答案,但更短。
开始的一天也可以用_d.withTimeAtStartOfDay()_ – Touko 2013-02-19 13:26:41
'withTimeAtStartOfDay()'不可用于'LocalDateTime',但它可用于['DateTime'](http://joda-time.sourceforge .net/apidocs/org/joda/time/DateTime.html#withTimeAtStartOfDay()) – Abdull 2013-10-31 12:18:40
+1。一个注意:'LocalDateTime是不可变的,所以没有设置方法。相反,这个方法会返回一个新的实例,其中每天的毫秒数改变了。“所以你必须把结果赋给一些变量。 – informatik01 2014-03-28 10:33:45
也是一种简单的方法是
d.millisOfDay().withMaximumValue();
这应该是被接受的答案,与其他答案相比,在性能方面表现最好(创建的对象更少,因为DateTime无法更改)。使用MaximunValue Documentation甚至说的方法是完成问题要求的最佳方法 – le0diaz 2016-01-26 22:31:36
getMaximumValueOverall有什么区别? – 2016-10-27 22:16:43
'按照惯例setXxx'在Java中没有返回类型,因此不会允许链接。这里提醒了构建器模式(最初不适用于现有对象)。 – 2012-02-05 22:53:58
确实。这使您可以将调用串在一起,而不是将它们全部放在不同的行上,并获得不可变对象的所有好处。 – 2012-02-06 02:28:12
我认为“模式”被称为“流畅的界面”http://martinfowler.com/bliki/FluentInterface.html - 在我看来,在可读性和清晰度方面有很多好处。 – 2012-02-06 06:07:44