Android 以分钟为单位的两次差值为负值
我有一个接受两个字符串参数的方法。这两个字符串是24小时格式的时间值。使用UI中的时间选择器拾取时间 该方法的目标是以分钟为单位获得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
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()
希望这有帮助