2010-01-29 62 views
2

我正在嘗試使用每月數據的時間序列。也就是說,每個月都有一個值,並且沒有與之相關的具體日期(或時間)。使用喬達時間操縱月度數據的最佳方式是什麼?

我可以任意固定一天,時間在某個恆定的時間(例如本月的第一個午夜),然後使用java.util.date或joda DateTime,但決定嘗試在joda類型系統中執行此操作。

我的第一步是建立一個YearMonth類延伸AbstractPartial(由類似於LocalDate)。我現在已經達到了嘗試將YearMonth增加數月的下一步。我可以自己編寫代碼(添加%12),但我寧願使用喬達風格的方式來執行此操作。

我應該寫什麼樣的代碼,以及它應該在哪裏生活,例如我可以在我的YearMonth類中添加一個13個月或2年的Period?或者我會走下一條糟糕的軌道?

回答

1

喬達時間svn有一個YearMonth類,準備v2.0。

+0

謝謝 - v2上的任何ETA?我會看看。 –

+0

經典OSS答案 - 完成時:-) – JodaStephen

1

年/月數學必須做如下:

ym = (year*12+month) 

Do your math on ym. Add months or years, or whatever 

year = ym/12 
month = ym % 12 

有沒有真正的替代品。這證明是正確的,沒有其他選擇會更簡單。有些語言(比如Python)有一個divmod函數,它結合了最後兩行代碼,但這並沒有改變本質。

你有單位(月),你會顯示給人們作爲年份。它可能是碼 - 英尺或小時 - 分鐘或任何其他簡單的轉換爲兩部分的基礎。

+0

我明白數學。喬達似乎花了很大力氣做出一份年表,將一年中有12個月的知識分開。你是否認爲使用這個是浪費時間?我能想到的唯一一種可以增加價值的地方是將日曆變爲13個月,或者每年的月份數不是偶數(Lunar?),但這可能是YAGNI的情況 –

+0

取決於您計劃的日曆支持。公曆日曆非常流行,並且具有固定的年/月關係。其他日曆,並不那麼簡單。你會不會支持非格里曆日曆?還是你擔心有人可能試圖改變公曆? –

+0

此外,您還有一堆可能包含相關「12」常量的類級字段(即'months')。 –

-1

DateTime currentInstant = new DateTime();

//添加一個月

currentInstant = currentInstant.plusMonths(1);

//添加2Y + 13M => 3Y 1M

時期incPeriod =新週期()plusYears(2).plusMonths(13)。

currentInstant = currentInstant.plus(incPeriod);

+0

對不起,這不回答這個問題。它說如何在DateTime中添加年份和月份。有充足的理由有一個只知道幾年和幾個月的課程。 –

相關問題