我一直致力于一个计算时差的应用程序,并且遇到这个非常奇怪的问题,模拟器和设备会产生不同的结果。
如果在电子邮件程序上将时间设置为 22:00 至 22:45 ,则差异为 45 。 当我在设备上运行时做同样的事情我得到 15
感谢。
更新
以下是我如何计算小时/分钟的代码
public int theTimeMachineHours(EditText a, EditText b) throws Exception{
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm");
Date startDate = simpleDateFormat.parse(a.getText().toString());
Date endDate = simpleDateFormat.parse(b.getText().toString());
long difference = endDate.getTime() - startDate.getTime();
if(difference<0)
{
Date dateMax = simpleDateFormat.parse("24:00");
Date dateMin = simpleDateFormat.parse("00:00");
difference=(dateMax.getTime() -startDate.getTime() )+(endDate.getTime()-dateMin.getTime());
}
int days = (int) (difference / (1000*60*60*24));
int hours = (int) ((difference - (1000*60*60*24*days)) / (1000*60*60));
int min = (int) (difference - (1000*60*60*24*days) - (1000*60*60*hours)) / (1000*60);
return hours;
}
更新2
以下是代码中调用timeMachine方法的部分的代码:
if(restFrom2Day1.length()!=0){
sendBreakHour2Day1 = ""+theTimeMachineHours(restFrom2Day1,restTo2Day1);
sendBreakMin2Day1 = ""+theTimeMachineMin(restFrom2Day1,restTo2Day1);
hour2Day1 = Integer.parseInt(sendBreakHour2Day1);
minute2Day1 = Integer.parseInt(sendBreakMin2Day1);
}
答案 0 :(得分:0)
我相信您处于夏令时区(夏令时),对吗?
这样,您的设备可能标记为23:00(而非22:00)。
也许,您将日历设置为22:00。但是,由于DST处于活动状态,因此您的时间实际上是23:00(22:00 + DST启用标志)。所以,也许,这就是为什么你得到15而不是45分钟。
答案 1 :(得分:0)
这会为您带来其他结果吗?
public long theTimeMachineHours(EditText a, EditText b) throws Exception{
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm", Locale.ENGLISH);
Date startDate = simpleDateFormat.parse(a.getText().toString());
Date endDate = simpleDateFormat.parse(b.getText().toString());
long different = endDate.getTime() - startDate.getTime();
long minutesInMilli = 1000 * 60;
long hoursInMilli = minutesInMilli * 60;
long hours = different % (hoursInMilli * 24) / hoursInMilli;
long minutes = different % hoursInMilli / minutesInMilli;
return hours;
}