2012-02-05 63 views
40

我想创建一周之间和本周结束之间的时间间隔。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。我将如何做到这一点?

回答

20

如何:

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); 
} 
+4

'按照惯例setXxx'在Java中没有返回类型,因此不会允许链接。这里提醒了构建器模式(最初不适用于现有对象)。 – 2012-02-05 22:53:58

+1

确实。这使您可以将调用串在一起,而不是将它们全部放在不同的行上,并获得不可变对象的所有好处。 – 2012-02-06 02:28:12

+0

我认为“模式”被称为“流畅的界面”http://martinfowler.com/bliki/FluentInterface.html - 在我看来,在可读性和清晰度方面有很多好处。 – 2012-02-06 06:07:44

127

可以使用withTime方法:

d.withTime(0, 0, 0, 0); 
d.withTime(23, 59, 59, 999); 

同彼得的答案,但更短。

+39

开始的一天也可以用_d.withTimeAtStartOfDay()_ – Touko 2013-02-19 13:26:41

+12

'withTimeAtStartOfDay()'不可用于'LocalDateTime',但它可用于['DateTime'](http://joda-time.sourceforge .net/apidocs/org/joda/time/DateTime.html#withTimeAtStartOfDay()) – Abdull 2013-10-31 12:18:40

+0

+1。一个注意:'LocalDateTime是不可变的,所以没有设置方法。相反,这个方法会返回一个新的实例,其中每天的毫秒数改变了。“所以你必须把结果赋给一些变量。 – informatik01 2014-03-28 10:33:45

65

也是一种简单的方法是

d.millisOfDay().withMaximumValue();

+10

这应该是被接受的答案,与其他答案相比,在性能方面表现最好(创建的对象更少,因为DateTime无法更改)。使用MaximunValue Documentation甚至说的方法是完成问题要求的最佳方法 – le0diaz 2016-01-26 22:31:36

+0

getMaximumValueOverall有什么区别? – 2016-10-27 22:16:43

相关问题