Android 以分钟为单位的两次差值为负值

Android 以分钟为单位的两次差值为负值,android,android-timepicker,Android,Android Timepicker,我有一个接受两个字符串参数的方法。这两个字符串是24小时格式的时间值。使用UI中的时间选择器拾取时间 该方法的目标是以分钟为单位获得StartTime和EndTime之间的持续时间 public static String getTimeDuration(String StartTime24, String EndTime24) { String duration = ""; try { SimpleDateFormat parseFormat = n

我有一个接受两个字符串参数的方法。这两个字符串是24小时格式的时间值。使用UI中的时间选择器拾取时间

该方法的目标是以分钟为单位获得
StartTime
EndTime
之间的持续时间

public static String getTimeDuration(String StartTime24, String EndTime24)
{
    String duration = "";

    try 
    {
        SimpleDateFormat parseFormat = new SimpleDateFormat("HH:mm");
        Date startTime = parseFormat.parse(StartTime24);
        Date endTime = parseFormat.parse(EndTime24);

        long mills = endTime.getTime() - startTime.getTime();
        long minutes = mills/(1000 * 60);

        duration = "(" + minutes + " Minutes)";
    }
    catch(ParseException ex)
    {
        // exception handling here
    }

    return duration;
}
如果两个时间都在一个日期内,则该方法可以正常工作。例如:

StartTime = 22:15
EndTime = 23:51
Output = (96 Minutes)
但我的问题是,如果结束时间在晚上12点之后,该方法返回负数。比如说,

StartTime = 23:51
EndTime = 0:55
Output = (-1376 Minutes)
What I want: (64 Minutes)

如何获得正确的持续时间?

您只分析分钟和小时。那里没有日子了。所以这两个时间都是在同一天(确切地说是大纪元的第一天,1970年1月1日)。所以答案是正确的。如果您希望它将结束时间视为第二天(如果它早于开始时间),那么如果结果小于0,则在结果中添加1天(1440分钟)。

由于没有使用日期,您必须首先检查
结束时间是否小于
开始时间。如果是,则您的
endTime
在第二天,您必须添加1天/86 400 000毫秒。然后你就会得到你想要的结果

只需添加以下条件:

if(endTime.getTime() < startTime.getTime()){  

   long mills = ((endTime.getTime() + 86400000) - startTime.getTime());  1 day = 86 400 000 mill

}
if(endTime.getTime()
希望这有帮助