以分钟为单位的两次时间差为负
Difference between two Times in Minutes are coming as negative
我有一个采用两个字符串参数的方法。这两个字符串是 24 小时格式的时间值。使用来自 UI.
的 TimePicker 选择时间
该方法的目标是获取 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 点以后,方法 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
}
希望对您有所帮助
我有一个采用两个字符串参数的方法。这两个字符串是 24 小时格式的时间值。使用来自 UI.
的 TimePicker 选择时间该方法的目标是获取 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 点以后,方法 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
}
希望对您有所帮助