2010-11-09 55 views
2

我有一個遺留的Java應用程序,其性能瓶頸是由於使用日曆。由於Calendar是一個可變對象,我們必須每次都克隆我們得到它。使用長時間戳或喬達時間

public Calendar getCalendar() { 
    return (Calendar)calendar.clone(); 
} 

我們還發現,在我們的應用程序中,我們根本沒有使用時區信息。我在想,我們應該重新因子代碼

public long getTimestamp() { 
    return timestamp; 
} 

我們只把時間戳到日曆或喬達日期時間,當我們需要執行日期/時間算術運算。或者爲了防止不可預見的未來,我們是否應該使用Joda DateTime

public DateTime getDateTime() { 
    return dateTime; 
} 
+0

LocalDateTime是適合使用的類,而不是DateTime,如果您沒有時區信息存儲 – JodaStephen 2010-11-09 08:48:33

+0

@JodaStephen,我想知道如果將來我需要TimeZone信息,更改是否便宜? (這就是爲什麼我猶豫使用純「長」)。如果我不需要時區信息,我將選擇使用'long',並在需要算術或比較時使用Java日曆。 – 2010-11-11 02:05:19

回答

0

你一定要使用JodaTime。確保你在java.util.Date中傳遞你的日期,這只是自1970年1月1日以來的一個很長的毫秒數。

3

一般來說,如果您不關心時區,並且您必須存儲大量時間戳,則最好將它們存儲爲long-s。它是每個時間戳8個字節。 'long'周圍的所有面向對象的日期 - 時間包裝器將每個時間戳佔用至少24個字節。當您需要執行任何日期時間算術時 - 將您的長時間戳轉換爲Joda DateTime(或MutableDateTime)。它們都是作爲「長」字段的包裝來實現的,所以從長期創建它們非常便宜。

+0

你的意思是「長」的權利? 「long-s」是什麼意思? (哦,我認爲你的意思是'長'。) – 2013-07-26 05:04:26

+0

另請參見:http://joda-time.sourceforge.net/faq.html#long – 2013-07-26 05:16:45