如何获得timePicker和System Time之间的时差

时间:2013-04-30 12:35:39

标签: android

我想制作一个小型警报应用程序。我想计算系统时间(当前)和时间从TimePicker(由用户选择)之间的时间差。我找不到一些好的解决方案。这是我的代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_alarm_list);
    timePicker = (TimePicker) findViewById(R.id.timePicker1);
    timePicker.setIs24HourView(true);
    b = (Button) findViewById(R.id.button1);
    c = Calendar.getInstance();
    timePicker.setOnTimeChangedListener(new OnTimeChangedListener() {





    @Override
    public void onTimeChanged(TimePicker arg0, int hours, int minutes) {
        c.set(Calendar.HOUR_OF_DAY, hours);
        c.set(Calendar.MINUTE, minutes);

        chosenTimeMills = c.getTimeInMillis();
    }
});


b.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
                          Date currentDate = new Date(System.currentTimeMillis());
                c.set(Calendar.HOUR_OF_DAY,currentDate.getHours());
                c.set(Calendar.MINUTE, currentDate.getMinutes());
                systemTimeMills = c.getTimeInMillis();

                long difference  =systemTimeMills-chosenTimeMills;
                Date date = new Date(difference);
                Log.d("TAGG", "Difference is: "+date.getHours()+" Hours and "+date.getMinutes()+" minutes");



    }
});
}

我很乐意得到答案。谢谢,奥斯曼!!!

3 个答案:

答案 0 :(得分:3)

试试这个

Calendar c2 = Calendar.getInstance();
c2.set(Calendar.HOUR_OF_DAY, 22);
c2.set(Calendar.MINUTE, 30);
long sub = c2.getTimeInMillis() - c.getTimeInMillis();

此处c是您已创建的Calender个实例,c2将为当前date time实例。


修改

onClick中,您可以尝试

Calendar cal = Calendar.getInstance();
long diff = c.getTimeInMillis() - cal.getTimeInMillis();
long diffInSec = TimeUnit.MILLISECONDS.toSeconds(diff);
int hour = (int) (diffInSec / (60 * 60));
int minremaining = (int) (diffInSec % (60 * 60));
int min = (int) (minremaining / (60));
int secondsRemaining = (int) (minremaining % (60));
Log.e("TAG", "Difference in    milliss   calendar      " + diff);
Log.e("TAG", "hour      " + hour);
Log.e("TAG", "min       " + min);
Log.e("TAG", "sec       " + secondsRemaining);

其中cCalendar个实例的值,在onTimeChanged

中设置

变量hourminsecondsRemaining将为您提供剩余的时间。

答案 1 :(得分:2)

您的主要问题是当您使用TimePicker时,您只能访问小时和分钟。 我想要你想要的区别,currentSystemTime和TodayTime + Hour and Minute。

例如: 如果用户在10:00(当前时间)选择20:35,则应该 10:35 。正确的吗?

所以这是我的解决方案(这里的完整示例:Github full example):

@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
    pickedHour = hourOfDay;
    pickedMinute = minute;
}

public void onClickListenerOfYourBUtton(View view)
{
    long currentTime = System.currentTimeMillis();
    long diffTime = 0;

    calendar = Calendar.getInstance();
    sysCurrent.setText(currentTime +"");

    calendar.setTimeInMillis(currentTime);//set to currentTime to know the current day
    calendar.set(Calendar.HOUR_OF_DAY, pickedHour); 
    calendar.set(Calendar.MINUTE, pickedMinute);

    diffTime = calendar.getTimeInMillis()- currentTime; // Here, i get the difference in hours, minutes, ...for the same day



    difference.setText(String.format("%02d:%02d",
            diffTime/hoursInMilis, 
            (diffTime%hoursInMilis)/minutesInMilis)); //Formating string




}

答案 2 :(得分:1)

好吧,你可以在Millis获得系统时间。并以毫秒为单位转换您选择的时间,并将其区别开来。