如何计算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. 如何计算两个日期之间的时间差? - MySql
- 5. JScript:如何计算两个日期时间之间的差异?
- 6. 如何计算两个日期之间的时间差 - MySql
- 7. 计算两个日期字段的计数之间的差异
- 8. 如何计算两个日期之间的差异是否大于20年?
- 9. 如何使用Node.js计算两个日期之间的差异?
- 10. 如何计算两个日期之间的差异?
- 11. 如何计算Objective-C中两个日期之间的差异?
- 12. 计算闰年中两个日期之间的天数
- 13. 计算PHP中两个日期之间的年数
- 14. 如何计算日期间隔中两行之间的差异?
- 15. 计算日期之间的年/月/日
- 16. 如何计算特定年份中两个日期之间的日期?
- 17. 计算javascript中两个日历日期之间的差异
- 18. 计算MVC中两个日期时间之间的差异5
- 19. 计算两个日期之间的差异并获得年份的值?
- 20. 计算日期之间的时间差
- 21. 如何计算两个日期之间的营业日数?
- 22. 你如何计算两个日期之间的星期数?
- 23. 如何计算和计算两个日期之间的字段?
- 24. 我如何计算两个日期之间的日期
- 25. 如何使用PHP计算两个日期之间的日期?
- 26. 计算两个日期之间的差异并计算出现次数
- 27. JavaScript计算两个日期之间的差异yy-mm-dd
- 28. 计算MySQL中两个日期条目之间的差异
- 29. javascript:计算两个日期之间的差异
- 30. 计算PHP中两个日期之间的差异
或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