我想做一个小闹钟应用程序。我想计算系统时间(当前)和时间之间的时间差从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);
其中c
为Calendar
实例,其值在onTimeChanged
变量hour
、min
和secondsRemaining
将给出剩余的时间。
您的主要问题是当您使用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
}
你得到的系统时间单位是毫秒。把你选择的时间换算成毫秒,然后取差值。