안드로이드 개발 팁 #16 - 특정 일이 속하는 주의 모든 날짜를 배열로 구하는 방법
시작하며...
한 주의 일정을 보여주는 앱을 만든다고 가정해 봅시다. 주간 일정은 테이블로 보여줘야 하는데요. 오늘 또는 특정일이 속하는 주의 모든 날들(7일이죠)을 알아야 합니다. 예를 들어봅시다. 오늘이 8월 6일 토요일이면, 8월 1일 (월)부터 8월 7일 (일)까지가 필요한 거죠. 이것을 코드로 어떻게 구현할 수 있을까요? 그것이 이번 포스트의 주제입니다.
특정일이 속하는 주의 월요일 구하기
LocalDate 클래스를 활용하여 2022년 8월 3일이 속하는 주의 월요일을 구해보겠습니다.
val date = "2022-08-03"
val monday = LocalDate.parse(date).with(DayOfWeek.MONDAY)
특정일의 다음 날, 다다음 날 구하는 방법
위 코드에서 월요일을 구했지요. 그 다음날인 화요일을 구하려면 그것의 plusDays(1)을 호출하면 됩니다. 다다음날인 수요일을 구하려면, 월요일 객체로부터 plusDays(2)을 호출하면 되지요.
val date = "2022-08-03"
val monday = LocalDate.parse(date).with(DayOfWeek.MONDAY)
val tuesday = monday.plusDays(1)
val wednesday = monday.plusDays(2)
특정일이 속하는 주의 모든 일들을 배열로 구하는 함수
위에서 설명드린 내용을 베이스로 특정일이 속하는 주의 모든 일들을 배열로 구하는 함수를 아래와 같이 만들어 보았습니다.
// 특정일이 속하는 주의 모든 일들을 배열로 구한다.
fun getWeekdays(
date: String // 특정일 (예: "2022-08-03")
): Array<LocalDate> {
// 특정일이 속하는 주의 월요일을 구한다.
val monday = LocalDate.parse(date).with(DayOfWeek.MONDAY)
// 해당 주의 모든 요일을 구하여 배열에 담는다.
return arrayOf(
monday,
monday.plusDays(1),
monday.plusDays(2),
monday.plusDays(3),
monday.plusDays(4),
monday.plusDays(5),
monday.plusDays(6)
)
}
오늘이 속하는 주의 모든 요일들 구하기
오늘 날짜는 LocalDate.now() 메소드를 호출하여 구할 수 있고요. 그것의 toString() 메소드로 오늘 날짜를 문자열로 읽을 수 있습니다. getWeekdays 함수 호출시 date 파라메터에 LocalDate.now().toString()을 대입하면 됩니다.
fun getCurrentWeekdays(): Array<LocalDate> {
return getWeekdays(LocalDate.now().toString())
}
지난 안드로이드 개발 팁
- #15 - RecyclerView에 리스트를 로딩한 후 처리할 일 작성
- #14 - RecyclerView 뷰에서 항목 클릭시 뷰가 깜빡이는 문제
- #13 - 공통으로 사용할 색상 리소스 만들고 뷰에 적용
- #12 - 코틀린 언어 변환시 추가로 수정할 build.gradle 파일들
- #11 - 리스트/배열로부터 찾을 원소의 위치 읽기
- #10 - 앱의 다크 모드 진입 막는 방법
- #9 - 데이터 바인딩/뷰 바인딩 사용하지 않을 경우 자체적으로 만드는 Views 클래스
- #8 - TextView에 linear gradient color 적용하기
- #7 - 다이얼 화면 연결하기 위해 Activity 클래스의 확장 메소드 작성
- #6 - 웹 브라우저를 여는 확장 메소드 작성
- #5 - HTML 적용된 TextView에서 링크 클릭은 어떻게 구현?
- #4 - RxJava의 Observable, Single 객체의 기본 설정 수행 메소드 정의하기
- #3 - 특정 화면 이동시 다른 화면 모두 닫기
- #2 - HTML 이스케이핑 적용된 문자 풀어주기
- #1 - TextView로 HTML 내용 보여주기
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.
Upvoted! Thank you for supporting witness @jswit.