我想要两个日期在java中的区别?

我想要两个日期在java中的区别?,java,Java,可能重复: 我试着用一些例子来区分两个日期,但我没有得到正确的答案 java.text.DateFormat df = new java.text.SimpleDateFormat("yyyy-mm-dd hh:mm:ss"); java.util.Date date1 = df.parse("2012-09-14 15:26:14+00"); java.util.Date date2 = df.parse("2012-08-30 15:26:14+00"); long diff =

可能重复:

我试着用一些例子来区分两个日期,但我没有得到正确的答案

java.text.DateFormat df = new java.text.SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
 java.util.Date date1 = df.parse("2012-09-14 15:26:14+00");
 java.util.Date date2 = df.parse("2012-08-30 15:26:14+00");
 long diff = Math.abs(date2.getTime() - date1.getTime());
 System.out.println("millisecond="+diff);
我也想要月差,但它没有给我。它给了我不同的天、小时、分和秒,但不是一个月。我做错了什么?请帮帮我

编辑:

这就是我要做的。

您可以使用Java时间库。用它来计算日期之间的时间差会容易得多

:

返回毫秒,而不是秒。你需要除以1000得到秒数

long diff = Math.abs(date2.getTime() - date1.getTime()) / 1000;
此外,如注释中所述,您的格式字符串不正确。应该是这样的:

"yyyy-MM-dd HH:mm:ss"

你得到的差异是两个日期之间的毫秒数,而不是秒数。请注意,您给出的日期之间的差异不是一个完整的月份。

将其称为getDuration(date1、date2、Calendar.month)


首先,让我们将yyyy-mm-dd hh:mm:ss更改为yyyy-mm-dd hh:mm:ss

日期之间的差异只能通过Calendar类来计算,下面是我基于日历的解决方案,不确定这是最好的解决方案,但它确实在发挥作用。它计算填充月份中的日期差异,即2012-09-30 15:26:14+00-2012-08-30 15:26:14+00为1个月。但是2012-09-30 15:26:14+00-2012-08-30 15:26:15+00是0个月。 请注意,区域设置也很重要,因为结果取决于节光设置。 我不会对此发表评论,希望代码中的所有内容都是明确的

public static void main(String[] args) throws Exception {
    java.text.DateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    java.util.Date date1 = df.parse("2012-09-30 15:26:14+00");
    java.util.Date date2 = df.parse("2012-08-30 15:26:14+00");
    int diff = getMonthDifference(date1, date2);
    System.out.println(diff);
}

private static int getMonthDifference0(java.util.Date-date1、java.util.Date-date2){
Calendar c1=Calendar.getInstance();
Calendar c2=Calendar.getInstance();
c1.设定时间(日期1);
c2.设定时间(日期2);
int-diff=0;
而(c2.getTimeInMillis()0){
差异--;
}否则如果(dd==0){
int hd=c2.get(日历小时数)-c1.get(日历小时数);
如果(hd>0){
diff++;
}否则如果(hd==0){
长t1=c1.getTimeInMillis()%(60*1000);
长t2=c2.getTimeInMillis()%(60*1000);
如果(t2>t1){
差异--;
}
}
}
返回差;
}

我不想使用joda时间库。我想使用SimpleDataFormat()。
yyyy-mm-dd
应该是
yyy-mm-dd
,因为
mm
表示分钟,而不是月。另外,
hh
表示12小时时钟,您应该使用24小时制的
HH
来正确解析小时数。@PeterLawrey:谢谢,我的问题解决了。@Jesper我怀疑解析
HH
HH
都可以。对于格式化,它很重要,使用
HH
作为标准实践可能会避免将来出现错误。
"yyyy-MM-dd HH:mm:ss"
 public static long getDuration(Date returnTime, Date leaveTime, int scale) {
        long durationInMillis = returnTime.getTime() - leaveTime.getTime();
        switch (scale) {
            case Calendar.MINUTE:
                return durationInMillis / ONE_MINUTE_IN_MILLIS;
            case Calendar.MILLISECOND:
                return durationInMillis;
            case Calendar.SECOND:
                return durationInMillis / ONE_SECOND_IN_MILLIS;
            case Calendar.HOUR:
                return durationInMillis / ONE_HOUR_IN_MILLIS;
            case Calendar.DAY_OF_YEAR:
            case Calendar.DATE:
                return durationInMillis / ONE_DAY_IN_MILLIS;
            case Calendar.MONTH:
                return durationInMillis / ONE_MONTH_IN_MILLIS; // 30days per month
        }
        throw new IllegalArgumentException("invalid scale specified");
    }
public static void main(String[] args) throws Exception {
    java.text.DateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    java.util.Date date1 = df.parse("2012-09-30 15:26:14+00");
    java.util.Date date2 = df.parse("2012-08-30 15:26:14+00");
    int diff = getMonthDifference(date1, date2);
    System.out.println(diff);
}
public static int getMonthDifference(java.util.Date date1, java.util.Date date2) {
    if (date1.after(date2)) {
        return getMonthDifference0(date1, date2);
    } else if (date2.after(date1)) {
        return -getMonthDifference0(date2, date1);
    }
    return 0;
}
private static int getMonthDifference0(java.util.Date date1, java.util.Date date2) {
        Calendar c1 = Calendar.getInstance();
        Calendar c2 = Calendar.getInstance();
        c1.setTime(date1);
        c2.setTime(date2);
        int diff = 0;
        while (c2.getTimeInMillis() < c1.getTimeInMillis()) {
            c2.add(Calendar.MONTH, 1);
            diff++;
        }
        int dd = c2.get(Calendar.DAY_OF_MONTH) - c1.get(Calendar.DAY_OF_MONTH);
        if (dd > 0) {
            diff--;
        } else if (dd == 0) {
            int hd = c2.get(Calendar.HOUR_OF_DAY) - c1.get(Calendar.HOUR_OF_DAY);
            if (hd > 0) {
                diff++;
            } else if (hd == 0) {
                long t1 = c1.getTimeInMillis() % (60 * 1000);
                long t2 = c2.getTimeInMillis() % (60 * 1000);
                if (t2 > t1) {
                    diff--;
                }
            }
        }
        return diff;
    }