我有一个方法,它接受两个String参数。这两个字符串是24小时格式的时间值。使用来自UI的TimePicker选择Times。
该方法的目标是在几分钟内获得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)
如何才能使持续时间正确?
答案 0 :(得分:1)
由于没有使用日期,您必须先检查endTime
是否小于startTime
。如果是,那么您的endTime
将在第二天,您必须添加1天/ 86 400 000毫秒。然后你会得到你想要的结果。
添加此条件:
if(endTime.getTime() < startTime.getTime()){
long mills = ((endTime.getTime() + 86400000) - startTime.getTime()); 1 day = 86 400 000 mill
}
希望这有帮助
答案 1 :(得分:0)
你只是解析分钟和小时。那里没有一天。所以这两个时间都放在同一天(第一天,即1970年1月1日)。所以答案是正确的。如果您希望它将结束时间视为早于开始时间的第二天,则如果结果小于0,则将结果添加1天(1440分钟)。