먼저 프로젝트의 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);
}
}