以分钟为单位的两次时间差为负

Difference between two Times in Minutes are coming as negative

我有一个采用两个字符串参数的方法。这两个字符串是 24 小时格式的时间值。使用来自 UI.

的 TimePicker 选择时间

该方法的目标是获取 StartTimeEndTime 之间的持续时间(以分钟为单位)。

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 点以后,方法 returns 是否定的。例如,

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

如何让持续时间正确?

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

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

只需添加此条件:

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

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

}

希望对您有所帮助