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

calendarview에서 날짜 선택한 정보를 받아오는 방법이 궁금합니다

0 추천
calendarview에서 선택한 날짜를 받아서 registerforactivity로 다음 액티비티로 넘겨주려고 하는데 선택한 날짜를 어떤식으로 받아오면 가능할까요..!
wjdah (180 포인트) 님이 2022년 3월 8일 질문

1개의 답변

0 추천

먼저 프로젝트의 app/build.gradle 에 https://developer.android.com/studio/write/java8-support 에 나온 것 처럼 Java8을 지원하는 설정을 하시고, LocalDate를 사용하세요. Java의 Calendar는 버그가 많아서 LocalDate/LocalTime/LocalDateTime의 사용을 권장하고 있습니다.

CaelendarView에서 선택한 날짜를 받아오기 위해 DateChangeListener를 설정하세요. CalendarView에서 날짜를 선택할 때 클래스멤버변수에 선택한 날짜를 저장합니다.

private LocalDate selectedDate; //클래스 멤버변수

calendarView.setOnDateChangeLlistener(new OnDateChangeListener() {
   @Override
   public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth) [
          // month가 zero 베이스이므로 +1을 함.
          selectedDate = LocalDate.of(year, month + 1, dayOfMonth);
   }
});

 

이제 액티비티를 보여줄 메소드에서 selectedDate가 널인지 체크해서 널인 경우는 날짜를 선택하게 하고, 그렇지 않으면 해당 액티비티를 띄우면 되겠죠. LocalDate는 Serializable 타입이므로 받은 곳에서 Serializable 타입으로 읽으면 됩니다.

LocalDate를 Date타입으로 변환하시려면 다음과 같이 하시면 됩니다.

public class DateUtil {
    public static Date localDateToDate(LocalDate localDate) {
        return localDateToDate(localDate, ZoneId.systemDefault());
    }

     public static Date localDateToDate(LocalDate localDate, ZoneId zoneId) {
        Instant instant = localDate.atStartOfDay().atZone(zoneId).toInstant();
        return Date.from(instant);
    }
}

 

그리고 날짜 포맷을 사용하시려면 DateTimeFormatter를 사용하시면 됩니다.

public class DateUtil {
   ...
  
   public static String formatDate(LocalDate localDate) {
     return formatDate(localDate, "yyyy-MM-dd");
  } 

  public static String formatDate(LocalDate localDate, String pattern) {
     DateTimeFormatter fomatter = DateTimeFormatter.ofPattern(pattern);
     return formatter.format(localDate);
  }
}

 

spark (227,930 포인트) 님이 2022년 3월 8일 답변
spark님이 2022년 3월 9일 수정
감사합니다 한번해보겠습니다!
...