2009-11-05 43 views
0

我曾經見過很多地方,一個方法需要很長的時間或者一個int來表示持續時間,以納秒,毫秒(最常見),秒和甚至幾天爲單位。這也是尋找錯誤的好地方。Java或.Net中的最佳持續時間類型

這個問題也相當複雜,一旦你意識到你可能意味着持續時間達到一定的秒數,或者一個時間間隔更適合人類對時間的感知,這樣24小時的持續時間總是持續成爲第二天在同一個「掛鐘」時間。或者根據日期不同,一年365或366天,因此2月28日以後的一年總是2月28日。

爲什麼沒有獨特的類型來表示這個?我在Java或.net中找不到任何內容

+0

你會調用一個表示絕對毫秒數的對象和一個表示「人性化」時間感知的對象嗎? – Hugo

回答

4

對於Java,請查看Joda(直觀且一致的日期/時間庫)及其DurationPeriod類。 DateTime對象可以通過這些對象處理添加和操作。

(答案改變,以反映低於重的意見。該時期的階級)

+0

Joda的持續時間類只是一個圍繞ms值的包裝,並且不能像「一天」那樣正確表示更長的持續時間。 – jarnbjo

+0

正確 - 但Joda提供'持續時間「和」週期「類來表示類似的概念。後者不是精確的毫秒數,但可以是「一天」或「一個月」,其確切的實際持續時間取決於它們所應用的間隔的開始時間。 –

+0

......如果我正確理解他的要求,這實際上正是OP所要求的 - http://joda-time.sourceforge.net/key_period.html –

8

在.NET中你可以使用TimeSpan structure代表的時間長度。

+0

許多程序員不知道這個結構是存在的,因爲他們沒有看到它在本地C#或VB.NET數據類型中表示 - 投你一票 - 鼓勵更多的人做同樣的事情,所以這個經常丟失的數據類型是衆所周知的。 –

+1

當然,如果你在.NET中減去或添加日期,你會得到一個TimeSpan。 – Powerlord

+0

是的,但這並不完全符合原始問題的要求。例如,沒有'TimeSpan.FromYears(int)'方法。在內部,它被測量爲一個64位無符號整數,其中包含自某個時期以來的毫秒數。沒有每個月/每年的抽象概念在所有情況下都適用,無論月份長度和閏年是否可變。我不認爲.NET BCL中存在這樣的類型。 –

1

這不是一個簡單的問題。也許Joda-Time將是一個有用的圖書館給你。它有一個持續時間類,可以做你所要求的。