View
오늘 알아볼 것?
오늘 알아 볼려고 하는 것은 바로 안드로이드에서 날짜를 데이터를 알아 볼 수 있는 Calendar 클래스에 대해서 알아보려고 한다.
저번에 말했듯이 Calendar 클래스를 잘 이용하면 달력을 만들 수 있다.
(현재 시도 중 ㅇㅅㅇ;)
Calendar 클래스란?
Calendar 클래스는 안드로이드에서 날짜 및 시간 정보를 다루는데 사용되는 클래스로, 이 클래스는 시간을 계산하고 조작하기 위한 다양한 메서드를 제공하며, 날짜와 시간을 효율적으로 다룰 수 있도록 도와준다.(대신 처음에는 쥰내 다루기 힘들다. 도와준다고만 했지 쉽다고는 안했다가 이런건가?...)
일단 그럼 많이 사용하는 3개의 메소드를 알아보자
getInstance()
기본적으로 Calendar클래스의 인스턴스를 가져오는 메소드인 getInstance()라는 메소드이다.
메소드 이름에서도 알 수 있듯이 인스턴스를 가져온다.
아래 예제 코드 처럼 사용한다.
val calendar = Calendar.getInstance()
해당 calendar를 까보면 아래 사진처럼 주는 것을 볼 수 있다.
add()
해당 Calendar의 인스턴스에 값을 더하거나 빼서 값을 변경할 수 있다.
Calendar 클래스안에 있는 년도, 월, 날짜 등에 값을 더하면 다음 년도, 월, 날짜
등으로 변경되고 빼게 되면 이전 년도, 월, 날짜
로 변경된다.
아래는 예제 코드이다.
val calendar = Calendar.getInstance() //현재 오늘 날짜 2024.02.29(2월 29일이 끝)
calendar.add(Calendar.YEAR, 1)
calendar.add(Calendar.MONTH, -1)
calendar.add(Calendar.DATE, 2)
위 코드에 대해서 하나씩 말하자면calendar.add(Calendar.YEAR, 1)
에서 1년을 더하므로 오늘 2024.02.29에서 2025.02.29으로 바뀌게 된다.calendar.add(Calendar.MONTH, -2)
에서 1개월을 빼므로 오늘 2024.02.29에서 2024.01.29으로 바뀌게 된다.calendar.add(Calendar.DATE, 2)
에서 2일을 더하므로 오늘 2024.02.29에서 2024.03.02으로 바뀌게 된다.(해당 년도 2월이 29일까지였음)
마지막 DATE를 더하는 add()함수에서 알 수 있듯이 add()함수는 DATE나 MONTH를 더하거나 뺄때 다른 요소에도 간섭이된다. 즉 2024년 3월 31일에서 DATE에 1일을 더하게 되면 2024년 4월 1일이된다.
그렇다면 간섭하지 않는 함수도 있지 않을까? 물론 있다.roll() 이라는 함수 이다.
쓰는법은 add()와 비슷한다.
val calendar = Calendar.getInstance() //현재 오늘 날짜 2024.02.29(2월 29일이 끝)
calendar.roll(Calendar.DATE, 2) // 2024.02.02 이 되는 걸로 앎음(혹시 모르니 각자 한번 해보자)
roll()함수는 직접해보자!!
set()
말 그대로 원하는 날짜로 Calendar를 세팅해준다는것이다.
아래 예제 코드를 보자
val calendar = Calendar.getInstance() //현재 오늘 날짜 2024.02.29(2월 29일이 끝)
calendar.set(Calendar.YEAR, 2022)
calendar.set(Calendar.MONTH, 3)
calendar.set(Calendar.DATE, 5)
코드의 결과에 대해서 말하자면calendar.set(Calendar.YEAR, 2022)
에서 2024년 -> 2022년으로 바뀌게 된다.calendar.set(Calendar.MONTH, 3)
에서 2월 -> 3월로 바뀌게 된다.calendar.set(Calendar.DATE, 5)
에서 29일 -> 5일로 바뀌게 된다.
총정리
오늘은 getInstance(), add(), set() 3개의 간단한 Calendar클래스의 함수를 알아보았다.(roll()은 보너스!)
내가 말한 3개의 함수를 한꺼번에 정리한 예제를 보여주겠다.
val currentDate = Calendar.getInstance()
Log.e("cyc","currentDate-->${currentDate}")
Log.e("cyc","YEAR-->${currentDate.get(Calendar.YEAR)}") //현재 년도
Log.e("cyc","MONTH-->${currentDate.get(Calendar.MONTH )}") //현재 월(1월 -> 0 )
Log.e("cyc","DATE-->${currentDate.get(Calendar.DATE )}") //현재 월 날짜
Log.e("cyc","WEEK_OF_YEAR-->${currentDate.get(Calendar.WEEK_OF_YEAR )}") //현재 년도의 몇째 주
Log.e("cyc","WEEK_OF_MONTH-->${currentDate.get(Calendar.WEEK_OF_MONTH )}") //현재 월의 몇째 주
Log.e("cyc","DAY_OF_YEAR -->${currentDate.get(Calendar.DAY_OF_YEAR )}") //현재 년도의 날짜
Log.e("cyc","DAY_OF_MONTH-->${currentDate.get(Calendar.DAY_OF_MONTH )}") //현재 월의 날짬
Log.e("cyc","DAY_OF_WEEK-->${currentDate.get(Calendar.DAY_OF_WEEK )}") //현재 요일(일요일 1, 토요일 7)
Log.e("cyc","HOUR-->${currentDate.get(Calendar.HOUR )}") //현재 시간(12시간제)
Log.e("cyc","HOUR_OF_DAY-->${currentDate.get(Calendar.HOUR_OF_DAY )}") //현재 시간(24시간제)
Log.e("cyc","MINUTE-->${currentDate.get(Calendar.MINUTE )}") //현재 분
Log.e("cyc","SECOND-->${currentDate.get(Calendar.SECOND )}") //현재 초
val calendar = currentDate.clone() as Calendar //currentDate를 clone한 것이다.
// Calendar 인스턴스에 더하고 빼기 (YEAR, MONTH, DATE의 값에 각각 더하고 뺌)
calendar.add(Calendar.YEAR, 1) //calendar의 년도에 1년을 더함
calendar.add(Calendar.MONTH, -2)
calendar.add(Calendar.DATE, 1)
Log.e("cyc","clone_YEAR_add()-->${calendar.get(Calendar.YEAR)}")
Log.e("cyc","clone_MONTH_add()-->${calendar.get(Calendar.MONTH)}")
Log.e("cyc","clone_DATE_add()-->${calendar.get(Calendar.DATE)}")
//Calendar 인스턴스의 원하는 값 세팅하기
calendar.set(Calendar.YEAR, 2011)
calendar.set(Calendar.MONTH, 4)
calendar.set(Calendar.DATE, 27)
Log.e("cyc","clone_YEAR_set()-->${calendar.get(Calendar.YEAR)}")
Log.e("cyc","clone_MONTH_set()-->${calendar.get(Calendar.MONTH)}")
Log.e("cyc","clone_DATE_set()-->${calendar.get(Calendar.DATE)}")
아래 사진은 위 코드의 Log 값이다.
getInstance(), add(), set(), roll()
'TIL > 스터디' 카테고리의 다른 글
코루틴-2(Coroutine) (0) | 2024.03.07 |
---|---|
코루틴-1(Coroutine) (0) | 2024.03.06 |
hilt가 무엇인디? (3) | 2024.02.27 |
안드로이드 Task(간단 포스트) (0) | 2024.02.26 |
Subject 클래스(PublishSubject, ReplaySubject) (0) | 2024.02.22 |