仿真器和设备给出不同的结果

时间:2016-07-01 20:15:12

标签: android time android-emulator device simpledateformat

我一直致力于一个计算时差的应用程序,并且遇到这个非常奇怪的问题,模拟器设备会产生不同的结果。

如果在电子邮件程序上将时间设置为 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);
    }

2 个答案:

答案 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;
}