http://my.oschina.net/zhibuji/blog/84301
//设置星期day从0到6,0是星期一 //从Android闹钟源码中看到的,突然感觉自己特别呆,从来没用过位移啊,与或啊。这个算法利用位移比我以前写的要高效多了,拿出来学习一下,顺便告诉自己要善于运用以前学过的知识。提高代码效率,改善时间复杂度和空间复杂度。 int mDays = 0;//作为星期几的标识,0是空,1是星期1,10是星期二,11是星期一和星期二两天 public void set(int day, boolean set) { if (set) { mDays |= (1 << day); } else { mDays &= ~(1 << day); } } private boolean isSet(int day) { return ((mDays & (1 << day)) > 0); } public String toString() { int[] DAY_MAP = new int[] { Calendar.MONDAY, Calendar.TUESDAY, Calendar.WEDNESDAY, Calendar.THURSDAY, Calendar.FRIDAY, Calendar.SATURDAY, Calendar.SUNDAY, }; StringBuilder ret = new StringBuilder(); // no days if (mDays == 0) { retrun ""; } // every day if (mDays == 0x7f) { return "每天"; } // count selected days int dayCount = 0, days = mDays; while (days > 0) { if ((days & 1) == 1) dayCount++; days >>= 1; } // short or long form? DateFormatSymbols dfs = new DateFormatSymbols(); String[] dayList = (dayCount > 1) ? dfs.getShortWeekdays() : dfs.getWeekdays(); // selected days for (int i = 0; i < 7; i++) { if ((mDays & (1 << i)) != 0) { ret.append(dayList[DAY_MAP[i]]); dayCount -= 1; if (dayCount > 0) ret.append( ",")); } } return ret.toString(); }