마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

calendar 하루 오차 현상

0 추천

 


                TimePicker timePicker = (TimePicker)findViewById(R.id.timePicker);
                int hour = timePicker.getHour();
                int minute = timePicker.getMinute();

                Calendar calendar = Calendar.getInstance();

                calendar.add(Calendar.DATE, 1);
                calendar.set(Calendar.HOUR_OF_DAY, hour-9);
                calendar.set(Calendar.MINUTE, minute);
                calendar.set(Calendar.SECOND, 0);

                Date date = calendar.getTime();

                Intent intent = new Intent(SubActivity.this, AlarmDialogActivity.class);
                intent.putExtra("리잉톤", ringtoneUri); //링톤Uri 값을 인텐트에 태워 보낸댜
                PendingIntent pIntent = PendingIntent.getActivity(SubActivity.this, 0, intent, 0);

                Log.i("로그찍어 설정한 시간", ""+date);

                //알람매니저 생성
                AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
                alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pIntent);

calendar를 생성한 후에 timepicker에서 값을 가져와서 수정해서 그 시간에 알람이 울리게 하고 있습니다..

calendar를 기본 세팅하게되면 그 값은 현재 시간을 나타내게 되는데요..

근데 여기서 문제는 제가 시와 분을 셋팅하고 로그를 찍어보면 그 시간이 다른건 다 정확한데 DATE값, 즉 일수가 하루차이로 들쭉날쭉합니다..

실제 현재 시간이 8월 30일일때, 어떨땐 8월30일로 잘 찍히다가, 하루가 지나면 하루전 값으로 찍히고, 다시 하루가 지나면 정상적인 DATE값으로 잘찍힙니다.

하루걸러서 이렇게 정확했다가, 하루 전 값으로 DATE가 셋팅이 되는 바람에 calendar.add(Calendar.DATE, 1); 이 코드를 썻다가 지웠다 반복중입니다..

어제까지는 8월 29일 정확히 찍히다가, 오늘 8월 30일이되니까 하루 전값인 8월29일로 되는 바람에 다시 calendar.add(Calendar.DATE, 1);를 추가했네요

똑돌이 (530 포인트) 님이 2016년 8월 30일 질문
calendar.set(Calendar.HOUR_OF_DAY, hour-9);
이 부분이 좀 의심이 가보이는데요. 하루가 지났다고 해도 시간을 9시간 전으로 돌리면 설정시간에 따라 다시 전날로 돌아갈 수도 있어 보이는데요.
단위 테스트를 만드셔서 시간을 여러가지로 바꾸어서 시간이 맞게 나오는지 테스트를 해보시길 권장합니다. 저런 경우 앱을 실행하고 매뉴얼로만 테스트한다면 시간이 너무 많이 소모될 듯합니다.

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...