1

現在の時間が他の 2 つの時間オブジェクトの間にあるかどうかを判断するにはどうすればよいですか?

例: 現在: 15:23、開始時刻: 22:00、終了時刻: 06:00。つまり、現在時刻はこの 2 つの時刻の間にあるのではなく、この「23:47」です。

※時間だけで日付は気にしません

私はこのようにそれをやろうとしました:

Time startTime = getStartTime();
Time endTime = getEndTime();

Calendar c = Calendar.getInstance();
Time now = new Time(c.getTimeInMillis());

if (now.before(endTime) && now.after(startTime)) {
    return true;
}

return false;

しかし、うまくいきません。それらはエラーではありませんが、機能しません。

より正確に言えば、問題は 15:35.after(22:00) が true を返すことです...そして私には理由がわかりません。問題は日付にあると思いますが、何がわかりません

4

4 に答える 4

0

このコードを試してください

long startTime = getStartTime(); // return the as long
long endTime = getEndTime();// return the value as long

Calendar c = Calendar.getInstance();
long now = c.getTimeInMillis();

if (now>startTime && now<endTime) {

    return true;

}

return false;
于 2012-12-28T13:08:30.993 に答える
0

アプリが音声コンテンツをアナウンスしない「静かな時間」が必要でした。

読みやすいようにフォーマットされた私のソリューションは次のとおりです。

private boolean quietTimesOk(final Context ctx) {

    final Calendar cal = Calendar.getInstance();
    final int hour = cal.get(Calendar.HOUR_OF_DAY);
    final int minute = cal.get(Calendar.MINUTE);
    final int combined = (hour * 60) + minute;

    final int qtsHour = getQuietTimeStartHour(ctx);
    final int qtsMinute = getQuietTimeStartMinute(ctx);
    final int qtsCombined = (qtsHour * 60) + qtsMinute;

    final int qteHour = getQuietTimeEndHour(ctx);
    final int qteMinute = getQuietTimeEndMinute(ctx);
    final int qteCombined = (qteHour * 60) + qteMinute;

    if (qtsCombined > qteCombined) {            
        Log.i("quietTimesOk", "- qtsCombined > qteCombined");

        if (combined < qtsCombined && combined > qteCombined) {
            Log.i("quietTimesOk", "- returning true");
            return true;
        }

    } else {            
        Log.i("quietTimesOk", "- qtsCombined < qteCombined");

        if (combined < qtsCombined || combined > qteCombined) {
            Log.i("quietTimesOk", "- returning true");
            return true;
        }
    }

    Log.i("quietTimesOk", "- returning false");

    return false;
}
于 2013-05-08T01:52:21.523 に答える
0

私は解決策を見つけました:

    Time startTime = getStartTime();
    Time endTime = getEndTime();

    Calendar startCalendarTime = Calendar.getInstance();
    startCalendarTime.set(Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTH, startTime.getHours(), startTime.getMinutes(), 0);

    Calendar endCalendarTime = Calendar.getInstance();
    endCalendarTime.set(Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTH, endTime.getHours(), endTime.getMinutes(), 0);

    Calendar midnightTime = Calendar.getInstance();
    midnightTime.set(Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTH, 23, 59, 0);

    Calendar nowCalendarTime = Calendar.getInstance();
    nowCalendarTime.set(Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTH);

    if (startCalendarTime.after(endCalendarTime)) {

        if (nowCalendarTime.after(midnightTime)) {
            startCalendarTime.add(Calendar.DAY_OF_YEAR, -1);
        } else {
            endCalendarTime.add(Calendar.DAY_OF_YEAR, 1);
        }

    }
    int hours = nowCalendarTime.getTime().getHours();
    int minutes = nowCalendarTime.getTime().getMinutes();
    nowCalendarTime.set(Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTH, hours, minutes, 0);

    if (nowCalendarTime.after(startCalendarTime) && nowCalendarTime.before(endCalendarTime)) {
        return true;
    }

    return false;
于 2012-12-28T17:42:14.500 に答える
0

タイプミスしただけだと思います。(now.before(endTime) && now.after(startTime)) を使用したい。

このような:

Time startTime = getStartTime();
Time endTime = getEndTime();

Calendar c = Calendar.getInstance();
Time now = new Time(c.getTimeInMillis());

if (now.before(endTime) && now.after(startTime)) {
    return true;
}

return false;
于 2012-12-28T13:16:44.103 に答える