2

ブラックベリーのネイティブカレンダーから「日」の値を読み取ろうとしています。値は整数として返され、曜日ごとの値にマップされます。値は次のようになります。

  • 月曜日:32768
  • 火:16384
  • 水:8192
  • 木:4096
  • 金:2048
  • 土:1024
  • 太陽:65536

イベントが1日発生している場合、値が月/火/水/木/金/土/日であるかどうかを確認できます。

if (rule.MONDAY == rule.getInt(rule.DAY_IN_WEEK)) {
    System.out.println("occurs monday");
}
rule.getInt(rule.DAY_IN_WEEK)

値も月曜日の値と同じです。

ここで問題となるのは、イベントが2、3日以上発生している場合、

rule.getInt(rule.DAY_IN_WEEK)

選択したすべての日の合計を返します。

例:日が:wed、satの場合、結果は9216、wed + satの合計として取得されます。これから、イベントが発生する日がわかりません。

これらの数値の順列/組み合わせを実行して、選択した「n」日数の正確な結果を取得するにはどうすればよいですか。

4

3 に答える 3

4

日は数字の単なるビットフラグであると想定しているため、チェックを変更する可能性があります。

if ( (rule.getInt(rule.DAY_IN_WEEK) & rule.MONDAY) != 0 ) {
   System.out.println("occurs monday");
}
于 2012-04-25T13:58:54.713 に答える
3

次のようにバイナリと演算子を使用します。

int day = rule.getInt(rule.DAY_IN_WEEK)
if(day & rule.MONDAY != 0) {
 System.out.println("occurs monday");
}
if(day & rule.WEDNESDAY != 0) {
 System.out.println("occurs wednesday");
} /* and so on */

次の点に注意してください。

0000 0100 0000 0000 = 1024

0000 1000 0000 0000 = 2048

. . . ビットマスクもチェック

于 2012-04-25T13:58:34.860 に答える
2

イベントが発生する曜日を知るには、次のようにする必要があります。

boolean occursOnMonday = (rule.getInt(rule.DAY_IN_WEEK) & rule.MONDAY) != 0;

& はビットごとの AND 演算子です。これはなぜですか?

水曜日は 8192 で、2 進数では 10000000000000 (2 かける 13) です。

土曜日は 1024 で、2 進数では 00010000000000 (2 かける 9) です。

したがって、水曜と土曜に発生するイベントは 9216 で、これは 10010000000000 です。

次に、ビット操作を使用して、どのビットが 1 で、どのビットが 0 であるかを知ることができ、それによってイベントが発生した日を知ることができます。

于 2012-04-25T14:02:02.713 に答える