2011-02-16 38 views
0

是否有Java中的日期類,我可以用年,月,日,小時,分鐘,秒和毫秒來構建日期類,然後進行比較,該日期類給出兩個日期值之間的毫秒數,忽略像夏令時,閏秒等?我可以使用Calendar類嗎?我正在考慮這樣做,但它談到了閏秒和夏令時,我不希望這會影響計算。Java中的簡單日期類

重要的是,以下不變成立的所有次:

對於所有Y1,Y2,M1,M2,D1,D2,H,M,S,MS:

(
    f(y1, m1, d1, h, m, s, ms).getTimeInMillis() - 
    f(y2, m2, d2, h, m, s, ms).getTimeInMillis() 
) 
% 
(24 * 60 * 60 * 1000) == 0 

我基本上需要知道函數f應該是什麼。

+0

如果您使用帶有本地時區的「日曆」,它是否仍然應用閏秒? (對於本地時區,如果JDK中沒有有用的值,則可以使用您自己的`SimpleTimeZone`實例 - 我不記得了)。 – 2011-02-16 07:01:13

回答

0

我會嘗試使用喬達日期時間,你可以做

DateTime d1 = new DateTime(y1,m1,d1,h1,m1,s1,ms1); 
DateTime d2 = new DateTime(y2,m2,d2,h2,m2,s2,ms2); 
long delta = d1.toMillis() - d2.toMillis(); 

還認爲:

DateTime d1 = new DateTime(y1,m1,d1,h1,m1,s1,ms1); 
DateTime d2 = new DateTime(y2,m2,d2,h2,m2,s2,ms2); 
Duration delta = new Duration(d1, d2); 
int days = delta.toPeriod().getDays(); 

如果您有可能想看看喬達年表對象不同尋常的需求。

0

您可以使用long。但你仍然需要擔心閏日。你可以做比較。

long start = System.currentTimeMillis(); // nanoTime is better for benchmarks 
// do something. 
long time = System.currentTimeMillis() - start; 

但是,如果你必須要考慮閏年等日曆可能是最好的選擇,因爲日期是自然凌亂;)你可以考慮JodaTime庫,它是更好的,但不是簡單得多。

1

您可以使用Calendar類來設置年份,月份和其他內容。

看看calendar.set()calendar.getTime()方法的javadocs。

然後,date.getTime()會給你絕對毫秒從1970年

3

是的,你可以使用日曆類爲您計算。您可以構建日期並使用getTimeInMillis()進行比較。

我也推薦一個joda-time java庫,它有很多日期功能。它也有更好的表現。

+0

日曆年/月/日/小時/分鐘/秒構造函數是否忽略夏令時? – Clinton 2011-02-16 09:43:33