【问题标题】:Android calculating time difference from time set in TimePickerAndroid计算与TimePicker中设置的时间的时间差
【发布时间】:2014-03-19 09:39:11
【问题描述】:

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

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... 类似的东西。我调试了一下,发现“d2”中的数据值是在1970年设置的。如何解决这个问题并以秒为单位正确计算差异?

【问题讨论】:

  • 我的猜测是你得到了那个日期,因为默认日期是 1970 年 1 月 1 日,所以你正在用那个日期和你设定的时间创建一个日期对象。
  • 是的,如何将日期设置为今天的日期

标签: android time dialog datetimepicker


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

      //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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-17
      • 2017-05-16
      • 2018-03-31
      • 2016-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多