Android计算TimePicker中设置的时间差

时间:2014-03-19 09:39:11

标签: android time dialog datetimepicker

我正在尝试计算两个时间变量之间的时差。第一个变量设置如下:

Time StartTime = new Time();
StartTime.setToNow();

使用时间选择器设置第二个变量,用户可以在其中设置小时和分钟:

我的时间选择了对话框代码:

//Time Picker Dialog
    Date d2 = null;
protected Dialog onCreateDialog(int id)
{       
    switch(id)
    {
    case dialog_id: 
        final Calendar c = Calendar.getInstance();
        hour = c.get(Calendar.HOUR_OF_DAY);
        minute = c.get(Calendar.MINUTE);
        return new TimePickerDialog(this, mTimeSetListener, hour, minute, true);
    }       
    return null;
}

private TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() {

    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int hour_minute) 
    {           
        hour = hourOfDay;
        minute = hour_minute;           
        textBox.setText(hour + " : " + minute);
        updateTime(hour, minute);       
    }
};
//fixing the "0" removal
private void updateTime(int hours, int mins) 
{
    String minutes = "";
    if (mins < 10)
        minutes = "0" + mins;
    else
        minutes = String.valueOf(mins);

    String aTime = new StringBuilder().append(hours).append(':').append(minutes).append(':').append("00")
            .append(" ").toString();
        textBox.setText(aTime);
        SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss",Locale.getDefault());
        try
        {
            d2 = format.parse(aTime);
        } catch (ParseException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


        final long difference = d2.getTime() - StartTime.toMillis(true);

        diffMinutes = difference / 1000;

        Toast.makeText(getBaseContext(), "Arrival time changed to: " + aTime, Toast.LENGTH_LONG).show();
}

我想知道开始时间和D2(aTime)之间有什么区别,但我得到了一个否定的答案 - 1649478203 ......就是这样。我调试了它,看到了&#34; d2&#34;中的数据值。是在1970年设置的。如何解决这个问题并在几秒钟内正确计算差异?

2 个答案:

答案 0 :(得分:0)

您可以尝试使用GregorianCalendar类而不是Date格式。使用this构造函数,获取今年,月和日的今天日期。您可以将秒数设置为零。

答案 1 :(得分:0)

找到答案我必须更新我的更新时间方法。这是我改变的:

  //fixing the "0" removal
private void updateTime(int hours, int mins) 
{
    String minutes = "";
    if (mins < 10)
        minutes = "0" + mins;
    else
        minutes = String.valueOf(mins);

    String aTime = new StringBuilder().append(hours).append(':').append(minutes)
            .append(" ").toString();
        textBox.setText(aTime);
        long currentTime = System.currentTimeMillis();

        calendar = Calendar.getInstance();
        calendar.setTimeInMillis(currentTime);
        calendar.set(Calendar.HOUR_OF_DAY, pickedHour);
        calendar.set(Calendar.MINUTE, pickedMinute);


        final long difference = calendar.getTimeInMillis() - StartTime.toMillis(true);

        diffMinutes = difference / 1000;

        Toast.makeText(getBaseContext(), "Arrival time changed to: " + aTime, Toast.LENGTH_LONG).show();
}