2

小さなアラームアプリを作りたいです。システム時間 (現在) と開始時間 (ユーザーが選択) の時間差を計算したい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");



    }
});
}

お答えいただければ幸いです。ありがとう、ウスマン!!!

4

3 に答える 3

3

これを試して

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

これcCalender作成したc2インスタンスで、 current のインスタンスになります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にありますかCalendaronTimeChanged

変数hour,はminsecondsRemaining残り時間を示します。

于 2013-04-30T12:53:26.630 に答える
2

あなたの主な問題は、 Hour と MinuteTimePickerにしかアクセスできないを使用する場合です。currentSystemTime と TodayTime + Hour and Minute の差が必要だと思います。

例: ユーザーが 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




}
于 2013-04-30T14:45:02.990 に答える
1

システム時刻はミリ秒単位で取得できます。選択した時間をミリ秒に変換し、その差を取ります。

于 2013-04-30T12:46:19.773 に答える