View

Calendar 클래스

제롱구리 2024. 2. 29. 10:43
728x90

오늘 알아볼 것?

오늘 알아 볼려고 하는 것은 바로 안드로이드에서 날짜를 데이터를 알아 볼 수 있는 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
Share Link
reply
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30