电子表格(MS Excel、Google Apps)将日期表示为自 1900 年 1 月 1 日以来的整天数(在 Excel 的情况下可能需要注意 2 月 29 日的奇怪情况)。好的,所以除了闰年之外是 365 天。但这已经是太多的算术了。
大概,java.util.[Gregorian]Calendar
知道所有这些东西。问题是,我不知道如何访问它的知识。
在投机世界中,人们可能会:
myGcalEarlier.set(1900, Calendar.JANUARY, 1);
myGcalLater.set(new Date());
long days1 = myGcalEarlier.mysteryMethod();
long days2 = myGcalLater.mysteryMethod();
long days = days2 - days1;
可悲的是,Calendar.get(Calendar.DAYS_IN_YEAR)
不满足“mysteryMethod”——它需要一个Calendar.DAYS_EVER
字段来做我想做的事。
是否有用于获得以日历日表示的准确差异的 API ?
笔记
我真的想要日历天,而不是 86400 秒的天数。除了时区和夏令时问题(感谢@Dipmedeep),还需要考虑闰年。在这些术语中,31536000 秒是 365 天。4 年中有 3 年,这让我从 1 月 1 日到 1 月 1 日。但是在第 4 年,它只让我从 1 月 1 日到 12 月 31 日,每 4 年给我一个 1 天的错误!
我已经有了获取日历天数的解决方案。迁移到 Java 是一段微不足道的代码,它得到了想要的答案(尽管我不理解它,因此不信任它)。这个问题专门询问(现在在编辑后更是如此)我是否可以完全避免进行这些计算并将其推迟到 JDK 中的“受信任”库。到目前为止,我的结论是“不”。