2012-02-05 52 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

相關問題