2

我正在尝试从黑莓的本机日历中读取“天”值,该值作为整数返回,该整数映射到一周中每一天的值。值如下:

  • 星期一:32768
  • 周二:16384
  • 周三:8192
  • 星期四:4096
  • 周五:2048
  • 坐:1024
  • 太阳:65536

如果事件发生在一天内,我可以查看该值是否为周一/周二/周三/周四/周五/周六/周日

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

值也与星期一值相同。

现在的问题是,如果事件发生在两三天或更长时间内,那么

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;

其中 & 是按位与运算符。为什么会这样?

星期三是 8192,二进制是 10000000000000(2 乘以 13)

星期六是 1024,二进制是 00010000000000(2 乘以 9)

所以周三和周六发生的事件是 9216,即 10010000000000。

然后使用位运算,您可以知道 1 中的哪些位以及 0 中的哪些位,这样您就可以知道事件发生的日期。

于 2012-04-25T14:02:02.713 回答