2014-09-24 51 views
1

說我有DateTime引用,並且我想讓前一天的時間在15:00。 如果我說什麼是在約定時間內獲得'前一天在15:00'的最簡單正確的方法

DateTime someTime = ....; 
DateTime yesterday1500 = someTime.toDateMidnight().toDateTime().minusDays(1).plusHours(15); 

,那麼這將在所有個工作日內除非有夏令時的變化。
如果someTime ='1.4.2014',我會得到'31 .3.2014 15:00'。
如果someTime = '31 .3.2014',我會得到'30 .3.2014 16:00'。

盡我所能想出是

yesterday1500 = new DateTime(someTime.getYear(), someTime.getMonthOfYear(), someTime.getDayOfMonth(), 15, 0, 0, 0); 

它工作正常,但似乎笨重。 有沒有更好的方法?

編輯: 我在克羅地亞是CEST(UTC + 01:00)時區。

編輯2: 加... toDateMidnight()toDateTime()...示例代碼,表明某個時候可以在任何時間點

回答

6

這是非常整潔:

DateTime dt = someTime.minusDays(1).withTime(15, 0, 0, 0); 
+0

正是我想要的。謝謝。 – 2014-09-24 09:02:18

-2

@dcarapic,我試過Joda的幾個版本,還沒有找到你的問題。

只需使用您的代碼,例如:

日期時間yesterday1500 = someTime.minusDays(1).plusHours(15);

輸出如下,我也檢查了two comings time saving moment,你的情況也不會發生。

2014-01-04T00:00:00.000 + 08:00 | 2014-01-03T15:00:00.000 + 08:00

2014-03-31T00:00:00.000 + 08:00 | 2014-03-30T15:00:00.000 + 08:00

2014-09-26T00:00:00.000 + 08:00 | 2014-09-25T15:00:00.000 + 08:00

2014-09-28T00:00:00.000 + 08:00 | 2014-09-27T15:00:00.000 + 08:00

順便說一下,withTime和plusHour都用Millis調用來設置新的小時。我沒有看到區別。我檢查了喬達2.4/1.6。那麼,你用什麼版本?

+1

-1代碼無法工作。去除一天並增加15個小時不會在前一天的下午3點導致。 – 2014-09-24 10:21:26

+0

我使用喬達時間1.5.2。 注意:我不允許更新到新的版本。我可以用我的時區重現問題(+01:00)。可能是您的時區不同時間的日光節約會發生變化。在我的時區它在02:00更改。 – 2014-09-24 13:03:33

+0

dcarapic,好的,那麼這是有道理的。我會在稍後檢查。我在中國,根本沒有節省時間。我的代碼不會發生您的情況。那是事實。而且,就是這樣。 @Duncan,放鬆一下。 – kthinker 2014-09-24 15:20:16

相關問題