0

私は小さな目覚まし時計アプリを開発しています.alarmManagerに間隔を渡すことができるように時差を計算する方法が必要です。私はここで似たようなトピックをたくさん見たので、質問は次のとおりです:私の目的のために時差を計算する最良の方法は何ですか? タイムピッカーから時間を取得して差を計算するメソッドを書きましたが、テスト中にクレイジーな値が得られるため、バグがあります..

    public int CalculateInterval() {

    /*--- get the target time from the time picker ---*/
    ViewGroup vg = (ViewGroup) tp.getChildAt(0);
    ViewGroup number1 = (ViewGroup) vg.getChildAt(0);
    ViewGroup number2 = (ViewGroup) vg.getChildAt(1);
    String hours = ((EditText) number1.getChildAt(1)).getText()
            .toString();
    String mins = ((EditText) number2.getChildAt(1)).getText()
            .toString();

    /*--- convert to integer values in ms ---*/
    int hrsInMillis = Integer.parseInt(hours) * 3600 * 1000;
    int mnsInMillis = Integer.parseInt(mins) * 60 * 100;

    /*--- obtain the current time in ms ---*/
    Calendar c = Calendar.getInstance(); 
    int secondsInMillis = c.get(Calendar.SECOND) * 1000;
    int minutesInMillis = c.get(Calendar.MINUTE) * 1000 * 60;
    int HoursInMillis = c.get(Calendar.HOUR) * 1000 * 3600;

    int current = secondsInMillis + minutesInMillis + HoursInMillis;

    /*--- calculate the difference ---*/
    int interval = (hrsInMillis + mnsInMillis) - current;

    return interval;
}
4

1 に答える 1

0
Calendar c = Calendar.getInstance(); 
int secondsInMillis = c.get(Calendar.SECOND) * 1000;
int minutesInMillis = c.get(Calendar.MINUTE) * 1000 * 60;
int HoursInMillis = c.get(Calendar.HOUR) * 1000 * 3600;

上記のコードは少し不要です。これが「クレイジーな値」を取得している理由だと思います。代わりに、longから値を取得し、cそれを別の で減算しlongます。

ただし、現在は時間と分をミリ単位でしか取得できないため、これはちょっとしたトリックです。

これが私がすることです(疑似コード):

set alarm to Calendar.getInstance()
set alarm.hour to Integer.parseInt(hours)
set alarm.minute to Integer.parseInt(mins)
set alarm.secs to 0
if alarm.before(now)
    add 1 day to alarm
endif
set difference to (alarm.getTimeInMillis() - now.getTimeInMillis())
于 2012-10-29T15:20:55.097 に答える