我试图从黑莓的原生日历中读取“日期”值,该值以整数形式返回,该值被映射为一周中每一天的值。值如下:
如果事件发生一天,我可以看到值是mon / tue / wed / thu / fri / sat / sun
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)
返回所选天数的总和。
示例:如果日期是:结婚,那么我得到结果为9216,结婚和坐的总和,从此我不知道事件发生的日期。
如何对这些数字进行排列/组合,并在选定的“n”天内获得准确的结果。
答案 0 :(得分:4)
我认为日期只是数字中的位标志,因此您可以更改支票:
if ( (rule.getInt(rule.DAY_IN_WEEK) & rule.MONDAY) != 0 ) {
System.out.println("occurs monday");
}
答案 1 :(得分: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
。 。 。 另请查看bit mask
答案 2 :(得分:2)
要了解事件发生的一周中的哪一天,您需要执行以下操作:
boolean occursOnMonday = (rule.getInt(rule.DAY_IN_WEEK) & rule.MONDAY) != 0;
其中&是按位AND运算符。为什么会这样?
周三是8192,二进制是10000000000000(2倍13)
星期六是1024,二进制是00010000000000(2倍9)
因此,周三和周六发生的事件是9216,即10010000000000。
然后使用位操作,您可以知道1中的哪些位以及0中的位,并且知道事件发生的日期。