2011-06-05 330 views
10

我是java的新手,我想將月份轉換爲年份。例如,如果我有18個月,除以12,我會有1。5年,但我想要1年和6個月。如何將月份轉換爲java中的年份和月份

感謝您的幫助。

+0

這是一個數學問題,它沒有任何與Java。 – 2012-05-30 15:55:28

+0

@ChristofferHammarström與Java完全不相干。構建了兩個複雜的框架來處理這些工作,第一個Joda-Time和現在Java內置的java.time及更高版本。雖然這個特殊情況可以通過數學來處理,但也有很多其他日期時間的工作。使用java.time類使得這些工作更加自我記錄,意圖比簡單整數數學更清晰。再加上ISO 8601格式內置支持的好處,可以減輕調試器和日誌中數據值的查看(以及數據交換)。 – 2016-08-09 02:13:55

+0

@BasilBourque在將月份轉換爲年份的具體情況下,一年中總是有12個月,簡單的劃分和模數。 – 2016-08-15 18:02:27

回答

17

使用模數%

int months = 18; 
int years = months/12; // 1 
int remainingMonths = months % 12; // 6 
+1

@Giku,在這種情況下,您可能需要考慮提高打字速度。 – 2011-06-05 22:48:37

+0

@jjj:這沒有什麼意義,因爲'double' - >'int'賦值已經完成。而且,你的行根本不編譯。也許你在你的真實代碼中犯了一個錯誤,在目前所提供的信息中是不可見的。 – BalusC 2016-09-16 07:09:01

1

java.time

java.time框架是建立在Java 8和更高版本。這些課程取代了老的麻煩日期時間課程,如java.util.Date,.Calendar,& java.text.SimpleDateFormatJoda-Time團隊還建議遷移到java.time。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。

大部分的java.time功能後移植到Java 6 並且還適於在[ThreeTenABP] (https://github.com/JakeWharton/ThreeTenABP)到Android。

ThreeTen-Extra項目將java.time擴展到其他類。這個項目是未來可能增加java.time的一個試驗場。你可以在這裏找到一些有用的類,如Interval,YearWeek,YearQuarter,等等。

Period

Period類跟蹤的時間無關的時間軸年,月,日方面的跨度。一定要撥打normalized作爲習慣,強迫它重新計算一年和六個月的十八個月。

Period period = Period.ofMonths(18).normalized(); 

提取年數和月數。

int years = period.getYears(); 
int months = period.getMonths(); 

您可以撥打toString以表示「durations」標準ISO 8601格式此值:PnYnMnDTnHnMnS。在這種格式中,P標誌着開始,而T將年 - 月 - 日部分與小時 - 分鐘 - 秒部分分開(在本問題的情況下不相關)。

String output = period.toString(); 

P1Y6M