两分钟的差异,以分钟为单位

时间:2014-03-07 19:41:47

标签: java

我在String中有两个日期格式(MMM dd,yyyy hh:mm:ss a)。 如何将两个字符串转换为日期并在几分钟内找到差异?

DateFormat df = new SimpleDateFormat("MMM dd, yyyy hh:mm:ss a", Locale.ENGLISH);  
Date start = df.parse(startstring);
Date end = df.parse(endstring);

在我想要在几分钟内取得差异后,我正在使用此代码:

long result = ((end.getTime()/60000) - (start.getTime()/60000));

但结果是0.我该如何解决这个问题? 我的字符串是:

开始于:3月07日星期五23:45:43 GMT + 04:00 2014年 结束:Fri Mar 07 23:46:01 GMT + 04:00 2014

3 个答案:

答案 0 :(得分:3)

你可以使用这种方法(首先计算自纪元以来的分钟数,然后减去它们) -

private static long getTimeInMinutesFromEpoch(Date d) {
    if (d == null) {
        return 0;
    }
    return d.getTime() / (60 * 1000);
}

public static long getMinuteDifference(Date a, Date b) {
    return Math.abs(getTimeInMinutesFromEpoch(b)
            - getTimeInMinutesFromEpoch(a));
}

public static void main(String[] args) throws ParseException {
    String startstring = "Mar 07, 2014 23:45:43 PM";
    String endstring = "Mar 07, 2014 23:46:01 PM";
    DateFormat df = new SimpleDateFormat("MMM dd, yyyy hh:mm:ss a",
            Locale.ENGLISH);

    Date start = df.parse(endstring);
    Date end = df.parse(startstring);
    System.out.println(getMinuteDifference(start, end));
}

输出

1

答案 1 :(得分:2)

从它的外观来看,你是在结束日期之前创建开始日期(除非有未包含的相关信息)。

Date start = df.parse(startstring);
Date end = df.parse(endstring);

这些将在完全相同的时间内创建,因此当您尝试在几分钟内找到差异时会给出0。

修改

您的时间:

start: Fri Mar 07 23:45:43 GMT+04:00 2014
end: Fri Mar 07 23:46:01 GMT+04:00 2014

相隔18秒。你会在几分钟内获得0的差异。

答案 2 :(得分:1)

您可以使用Calendar对象代替Date,然后使用Calendar.get(Calendar.MINUTE)获取分钟。请注意,通过使用此逻辑,22:45:43 GMT+04:00 201423:45:43 GMT+04:00 2014之间的差异将为零分钟。