달력

12

« 2024/12 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
안드로이드 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
:
Posted by НooпeУ


Code Start Code End