如何获取timePicker和System time之间的时间差



我想做一个小闹钟应用程序。我想计算系统时间(当前)和时间之间的时间差从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");

    }
});
}

我很想知道答案。谢谢,乌斯曼! !

try this

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将给出剩余的时间。

您的主要问题是当您使用TimePicker时,您只能访问小时和分钟。我假设你想要currentSystemTime和TodayTime +小时和分钟的差异。

例如

:如果用户在10:00(currentTime)选择20:35,您应该得到10:35。正确吗?

所以这是我的解决方案(完整的例子在这里:Github完整的例子):

@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


}

你得到的系统时间单位是毫秒。把你选择的时间换算成毫秒,然后取差值。

最新更新