我的心脏必须深入到减去两个日期以计算出天数后,内部开始流血:
GregorianCalendar c1 = new GregorianCalendar(); GregorianCalendar c2 = new GregorianCalendar(); c1.set(2000, 1, 1); c2.set(2010,1, 1); long span = c2.getTimeInMillis() - c1.getTimeInMillis(); GregorianCalendar c3 = new GregorianCalendar(); c3.setTimeInMillis(span); long numberOfMSInADay = 1000*60*60*24; System.out.println(c3.getTimeInMillis() / numberOfMSInADay); //3653
.NET或你命名的任何现代语言中只有两行代码。
这对Java不好吗?还是我应该知道一个隐藏的方法?
可以在util中使用Date类而不使用GregorianCalendar吗?如果是这样,我是否应该提防像1970年这样的细微事情?
谢谢
这确实是标准Java API中最大的史诗失败之一。有一点耐心,那么你将获得JSR 310 / ThreeTen指定的新Date and Time API的风格的解决方案,(很可能)它将包含在即将发布的Java 8中。
在此之前,你可以离开JodaTime。
DateTime dt1 = new DateTime(2000, 1, 1, 0, 0, 0, 0); DateTime dt2 = new DateTime(2010, 1, 1, 0, 0, 0, 0); int days = Days.daysBetween(dt1, dt2).getDays();
它的创建者Stephen Colebourne是JSR 310背后的家伙,所以看起来很相似。