2013-03-18 87 views
3

正如我打字時那樣,我自己想出了它。我將回答我自己的問題,包括我自己在內的未來用戶。jodatime本地數據時間間隔

我希望能夠在一段時間內保存到LocalDateTime對象,但似乎不允許。當我這樣做:

LocalDateTime start = new LocalDateTime(); 

    LocalDateTime end = start.plusMinutes(30); 

    Interval interval = new Interval(start, end); 

我得到編譯問題。我認爲這是因爲LocalDateTime不是ReadableInstant

有沒有合適的解決方法?

看起來這是可能的:

週期期間=新週期(開始,結束);

但是,你失去了「getStart \ End」方法。

回答

4

爲了使用IntervalLocalDateTime你必須這樣做:

Interval interval = new Interval(start.toDateTime(), end.toDateTime()); 

產生的時間可以很容易地調試的時間會從本地時區轉換,你知道是什麼時候帶你正在處理。但是在夏令時期間它會有問題。要解決此問題,請將結果強制爲DateTimeZone.UTC,在這種情況下,您將丟失與時間相關的時區數據(如果您實際上始於LocalDateTime,則通常不關心這些數據,但請確保始終如一地使用它並永不建立您的Interval •不用轉換。

Interval interval = new Interval( 
    start.toDateTime(DateTimeZone.UTC), end.toDateTime(DateTimeZone.UTC)); 

這是通過下面的試驗證明了(假設你在EST時區)

@Test 
public void testLocalDateTimeDST() { 
    LocalDateTime dst_2017_03_12 = LocalDateTime.parse("2017-03-12T02:01:00"); 
    System.out.println(dst_2017_03_12); 
    try { 
     System.out.println(dst_2017_03_12.toDateTime()); 
     Assert.fail("Should've thrown an IllegalInstantException"); 
    } catch (IllegalInstantException e) { 

    } 
    System.out.println(dst_2017_03_12.toDateTime(DateTimeZone.UTC)); 
} 
+3

方法'toDateTime()'的LocalDateTime對象使用轉換爲DateTime **默認區域**,因此,通過這樣做,您將違背LocalDateTime的目標用途表示沒有時區的日期時間。如果你寫的東西適合你,那麼你應該從一開始就使用DateTime對象。 – mradzinski 2015-07-08 15:00:09

+0

LocalDateTime在許多業務場景中實際上很有用,因爲許多業務應用程序不處理24x7配置,而是處理當地時間。他們通常在當地工作時間與人打交道。 – 2017-02-20 16:23:28