2010. 7. 23. 11:19
10진수를 2진수로 만들어서 요일과 대치하기 JAVA이야기2010. 7. 23. 11:19
안드로이드 Alarm 테이블을 보면, daysOfWeek값에 요일이 저장되어 있는게 아니라 숫자로 되어 있다.
요일 - (밑, 지수)
월 - (2,0)
화 - (2,1)
수 - (2,2)
목 - (2,3)
금 - (2,4)
토 - (2,5)
일 - (2,7)
만약 설정한 요일이 '월화수'이면 월화수에 대응하는 숫자를 다 더한 값이 daysOfWeek컬럼에 저장된다.
이 숫자를 다시 요일로 바꾸는 방법은 다음과 같다.
enum Days {월, 화, 수, 목, 금 토, 일}
Vector<Integer> dayList = new Vector<Integer>();
int _dayOfWeek = dayOfWeek;
int[] a = {1,2,4,8,16,32,64};
search: for (int i = 0; i < Days.values().length-1; i++) {
/*
* 사이에 있는 값을 찾았으면, dayList에 작은 값을 저장하고 _dayOfWeek -= temp 수행후
* i = 0초기화한다.
*/
// int a = Integer.numberOfLeadingZeros(_dayOfWeek);
if((int) Math.pow(2,Days.MONDAY.ordinal())+i <= _dayOfWeek && _dayOfWeek <= (int) Math.pow(2,Days.MONDAY.ordinal()+i+1))
{
for (int j = 0; j < a.length; j++) {
if(_dayOfWeek == a[j]){
int temp = (int) Math.pow(2, Days.MONDAY.ordinal()+i+1);
_dayOfWeek -= temp;
dayList.add((Integer) logX(temp,2));
break;
}
}
int temp = (int) Math.pow(2, Days.MONDAY.ordinal()+i);
_dayOfWeek -= temp;
dayList.add((Integer) logX(temp,2));
i = 0;
}
if(_dayOfWeek == 0)
{
break;
}
if(_dayOfWeek == 1)
{
dayList.add((Integer) logX(_dayOfWeek,2));
break;
}
}
//내림차순으로 정렬한다.
Collections.sort(dayList);
/*
* dayList = {0,1,4,6} 예를들면 이런 식으로 정렬되었을 것이다.
* dayList와 Days를 이용해서
* 요일을 구해야 한다.
*/
Vector<String> vec = new Vector<String>();
for (Integer integer : dayList) {
for (Days day : Days.values()) {
if(integer == day.ordinal())
{
vec.add(day.toString());
break;
}
}
}
'JAVA이야기' 카테고리의 다른 글
Thread - API (0) | 2010.08.06 |
---|---|
JAVA - polymorphism (0) | 2010.07.29 |
대여할 책 (0) | 2010.04.24 |
'10.03.29 story (0) | 2010.04.01 |
'10.03.28 story (0) | 2010.04.01 |