一尘不染

如何在Java中减去日期?

java

我的心脏必须深入到减去两个日期以计算出天数后,内部开始流血:

    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年这样的细微事情?

谢谢


阅读 367

收藏
2020-03-15

共1个答案

一尘不染

这确实是标准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背后的家伙,所以看起来很相似。

2020-03-15