3

アラームを設定するときに、Android アラームと同様の文字列を生成したいと考えています。

例:
- 「6 日 10 時間 9 分後にアラームを設定」。
- 「アラームを 10 時間 9 分後に設定します。」
- 「今から 9 分後にアラームを設定しました。」

私は使用できます:

DateUtils.getRelativeTimeSpanString(alarm.triggerTime, 
                    System.currentTimeMillis(), 
                    DateUtils.MINUTE_IN_MILLIS, 
                    flags).toString();

"in 19 hours" のようなメッセージが生成されます。「19時間5分で」とか「5日10時間30分で」というようなものはなかなか作れそうにありません。

可能であれば、Android のローカライズされたヘルパー クラス ( DateUtils. 他の言語で問題を引き起こす可能性のある文字列をステッチする必要はありません。

4

1 に答える 1

-1

使用している場合は、このチュートリアルEclipse IDEからインストールしてみてくださいGrepCode_PluginGrepCode_Plugin

それが終わったら、 でGrepCode Searchボックス検索しandroid.text.format.DateUtilsます。すべてのファイルが一覧表示されます。最新のものをダウンロードしてみてください。

そのファイルからメソッドを取得し、必要に応じて変更します。

あなたの参照のために、私はリストされた方法を入れようとしていますandroid 4.1.1_r1

public static CharSequence getRelativeTimeSpanString(long time, long now, long minResolution,
            int flags) {
    Resources r = Resources.getSystem();
    boolean abbrevRelative = (flags & (FORMAT_ABBREV_RELATIVE | FORMAT_ABBREV_ALL)) != 0;

    boolean past = (now >= time);
    long duration = Math.abs(now - time);

    int resId;
    long count;
    if (duration < MINUTE_IN_MILLIS && minResolution < MINUTE_IN_MILLIS) {
        count = duration / SECOND_IN_MILLIS;
        if (past) {
            if (abbrevRelative) {
                resId = com.android.internal.R.plurals.abbrev_num_seconds_ago;
            } else {
                resId = com.android.internal.R.plurals.num_seconds_ago;
            }
        } else {
            if (abbrevRelative) {
                resId = com.android.internal.R.plurals.abbrev_in_num_seconds;
            } else {
                resId = com.android.internal.R.plurals.in_num_seconds;
            }
        }
    } else if (duration < HOUR_IN_MILLIS && minResolution < HOUR_IN_MILLIS) {
        count = duration / MINUTE_IN_MILLIS;
        if (past) {
            if (abbrevRelative) {
                resId = com.android.internal.R.plurals.abbrev_num_minutes_ago;
            } else {
                resId = com.android.internal.R.plurals.num_minutes_ago;
            }
        } else {
            if (abbrevRelative) {
                resId = com.android.internal.R.plurals.abbrev_in_num_minutes;
            } else {
                resId = com.android.internal.R.plurals.in_num_minutes;
            }
        }
    } else if (duration < DAY_IN_MILLIS && minResolution < DAY_IN_MILLIS) {
        count = duration / HOUR_IN_MILLIS;
        if (past) {
            if (abbrevRelative) {
                resId = com.android.internal.R.plurals.abbrev_num_hours_ago;
            } else {
                resId = com.android.internal.R.plurals.num_hours_ago;
            }
        } else {
            if (abbrevRelative) {
                resId = com.android.internal.R.plurals.abbrev_in_num_hours;
            } else {
                resId = com.android.internal.R.plurals.in_num_hours;
            }
        }
    } else if (duration < WEEK_IN_MILLIS && minResolution < WEEK_IN_MILLIS) {
        count = getNumberOfDaysPassed(time, now);
        if (past) {
            if (abbrevRelative) {
                resId = com.android.internal.R.plurals.abbrev_num_days_ago;
            } else {
                resId = com.android.internal.R.plurals.num_days_ago;
            }
        } else {
            if (abbrevRelative) {
                resId = com.android.internal.R.plurals.abbrev_in_num_days;
            } else {
                resId = com.android.internal.R.plurals.in_num_days;
            }
        }
    } else {
        // We know that we won't be showing the time, so it is safe to pass
        // in a null context.
        return formatDateRange(null, time, time, flags);
    }

    String format = r.getQuantityString(resId, (int) count);
    return String.format(format, count);
}
于 2013-02-08T04:52:51.153 に答える