如何計算Java中兩個日曆的年差數?如何計算兩個日期之間的年差數?
回答
首先你需要確定哪一個比另一個老。然後使用while
循環,其中您測試較舊的不是新的after()
。在舊版上添加一個(1
)Calendar.YEAR
以調用Calendar#add()
以添加年份。請保留一個櫃檯來計算這些年份。
開球例如:
Calendar myBirthDate = Calendar.getInstance();
myBirthDate.clear();
myBirthDate.set(1978, 3 - 1, 26);
Calendar now = Calendar.getInstance();
Calendar clone = (Calendar) myBirthDate.clone(); // Otherwise changes are been reflected.
int years = -1;
while (!clone.after(now)) {
clone.add(Calendar.YEAR, 1);
years++;
}
System.out.println(years); // 32
這就是說,在Java SE的Date
和Calendar
的API實際上是史詩般的失敗。計劃即將到來的Java 8中有一個新的Date API,JSR-310與Joda-Time非常相似。到目前爲止,您可能會考慮Joda-Time,因爲它可以減輕日期/時間計算/修改。下面是使用Joda-Time的示例:
DateTime myBirthDate = new DateTime(1978, 3, 26, 0, 0, 0, 0);
DateTime now = new DateTime();
Period period = new Period(myBirthDate, now);
int years = period.getYears();
System.out.println(years); // 32
更清晰簡潔,不是嗎?
或者你可以只使用Calendar.getTimeInMillis()
:
long msYear = 1000L * 60 * 60 * 24 * 365;
long msDiff = c2.getTimeInMillis() - c1.getTimeInMillis();
System.out.println("Years diff: " + String.valueOf(msDiff/msYear));
編輯 這忽略閏年。但是如果你正在尋找一個閏年的整數表示,那麼閏年與半個千年左右的時間無關。例如,這對計算某人的年齡有很大的準確性。但不夠準確,不足以告訴他們的生日。
如果您需要的年份差異比人類壽命期內的三位有效數字更準確(大約80.00年vs 80.05),則應使用「官方」解決方案。
如果沒有,沒有什麼特別的理由需要額外的努力來達到一定程度的精度,你不會使用它。
這是閏年,閏分等嗎? – 2010-05-17 01:38:45
沒有。假設如果你正在尋找幾年的倍數,你不會過分擔心一兩天的不匹配。如果您在維基百科中查看一年中的確切時間長度,您可以從長遠角度儘可能接近您的期望。 – 2010-05-17 01:45:48
@Nick:飛躍*分鐘* ?? – 2010-05-17 06:22:25
Calendar dobDate; // Set this to date to check
Calendar today = Calendar.getInstance();
int curYear = today.get(Calendar.YEAR);
int curMonth = today.get(Calendar.MONTH);
int curDay = today.get(Calendar.DAY_OF_MONTH);
int year = dobDate.get(Calendar.YEAR);
int month = dobDate.get(Calendar.MONTH);
int day = dobDate.get(Calendar.DAY_OF_MONTH);
int age = curYear - year;
if (curMonth < month || (month == curMonth && curDay < day)) {
age--;
}
這樣可以避免循環,並且應該準確無誤。
double diff = d2.getTime() - d1.getTime();
double d = 1000 * 60 * 60 * 24 * 365;
return (int) Math.round(diff/d);
(java.lang.Math中)
注意:小心閏年和其他這樣的日曆古怪。 – michaelb958 2013-06-03 07:48:14
- 1. 如何計算兩個日期之間的年數?
- 2. 如何計算兩個日期之間的數十年
- 3. 如何計算兩個日期之間的年數?
- 4. 如何計算Javascript中兩個日期之間的年,月和日差異?
- 5. 如何計算兩個日期之間的時間差 - MySql
- 6. 如何計算兩個日期之間的時間差? - MySql
- 7. JScript:如何計算兩個日期時間之間的差異?
- 8. 如何在年,月,日兩個日期之間計算datediff?
- 9. 計算兩個datetime.date()日期之間在年份和月份之間的差異
- 10. 計算兩個日期字段的計數之間的差異
- 11. 如何計算兩個日期之間的差異是否大於20年?
- 12. 如何計算兩個日期之間的差異
- 13. 如何計算兩個日期之間的差異正確php
- 14. 如何計算Objective-C中兩個日期之間的差異?
- 15. 如何計算VB.net中兩個日期之間的差異?
- 16. 如何用PHP計算兩個日期之間的差異?
- 17. 如何使用Node.js計算兩個日期之間的差異?
- 18. 如何計算兩個日期之間的差異?
- 19. 如何計算IronPython中兩個日期之間的差異?
- 20. 計算閏年中兩個日期之間的天數
- 21. 計算PHP中兩個日期之間的年數
- 22. 如何計算日期間隔中兩行之間的差異?
- 23. 錯誤地計算兩個日期之間的年/月/日
- 24. 計算日期之間的年/月/日
- 25. 如何計算特定年份中兩個日期之間的日期?
- 26. 計算兩個日期之間的差異會返回負數
- 27. 計算javascript中兩個日曆日期之間的差異
- 28. 計算MySQL中兩個日期時間之間的差異
- 29. 計算兩個不同格式日期之間的時間差
- 30. 計算MVC中兩個日期時間之間的差異5
或Years.yearsBetween(myBirthDate,現在).getYears(); – mtpettyp 2010-05-17 02:01:55
我無法創建期間對象。它似乎是私人的java.util.time下...你能幫我嗎請怎麼才能找到使用期間的差異? – 2015-11-13 09:10:28
@ Mr.Noddy:代碼片段是JodaTime而不是JavaTime。在JavaTime中,使用()'之間的'Period#。另請參閱javadoc https://docs.oracle.com/javase/8/docs/api/java/time/Period.html – BalusC 2015-11-13 09:53:59