본문 바로가기

안드로이드 프로그래밍/kotlin

[Android Studio] # date and time 다루기

안드로이드의 날짜 라이브러리

 

💻 날짜를 다루기 위해서는 날짜객체를 만들고 그 날짜객체를 자기가 필요로 하는 양식에 맞춰서 표현하면 된다.

 


🔽 먼저 New Project 를 만들어보자.

 

 

🔽 activity_main.xml

     id : textView

 

 

❓❕ import kotlinx.android.synthetic.main.activity_main.* 이 안될 경우 해결 방법

더보기

1. build.gradle(app.module) 에서 

2. kotlin-android-extensions 플러그인 추가

3. Sync Now 클릭

 

 


📌 java.util.Date 라이브러리 

val utilDate = Date()
println(utilDate.toString())

 

 

이 객체의 표현패턴을 바꿔보자.

val utilDate = Date()
val formatType = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
println(formatType.format(utilDate))

 

 

 

 

📌 java.time 라이브러리 

java.util.Date 라이브러리는 API level 1 부터 추가된 오래된 라이브러리여서 여러 문제도 많다.

시간관련 문제를 많이 개선한 java.time 라이브러리를 사용하는 것을 권한다.

 

날짜객체를 만든 뒤 포매터를 표시형식을 조정하는 것은 동일하다.

val date = LocalDateTime.now()
val dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
val nowString = date.format(dtf)
println(nowString)

 

 

 

 

❗❗ 문제는 java.time 이 API level 26 에서 새로 추가된 라이브러리이기 때문에 오레오 미만의 기기에서는 시간을 대응하는 코드를 추가로 준비해야 한다는 점이다.

 

 

 

 

 

 

 

그럼 오레오 미만에서는 어떻게 ?? -> 외부 라이브러리 사용해야 한다.

 

 

 

📌 Joda-Time 라이브러리 

Joda-Time 라이브러리는 현재 active 하게 개발되진 않지만 API level 26 미만에서 정확한 시간을 사용하기에 적절한 라이브러리이다.

 

java.time과 공유하여 사용하기 위해서는 다음과 같이 안드로이드 버전을 확인하고 버전에 맞는 라이브러리로 timeDate 객체를 만들어 주면 된다.

 

//Gradle 에 추가
implementation 'joda-time:joda-time:2.10.10'

val timeDate: String
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
	val date = LocalDateTime.now()
    val dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
    val nowString = date.format(dtf)
    timeDate = nowString
} else {
	val date = org.joda.time.LocalDateTime.now()
    val dtf = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss")
    val jodatime = dtf.parseDateTime(date.toString())
    val nowString = dtf.print(jodatime)
    timeDate = nowString
}

 

 

 

 

 

 

📌 두 날짜 사이의 차이 계산하기

2000년 1월 1일 부터 오늘까지 경과한 날 수를 계산해보자.

val period: Int
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
	val startDate = LocalDate.of(2000, 1, 1)
    val todayDate = LocalDate.now()
    val differenceDate = startDate.until(todayDate, ChronoUnit.DAYS) + 1
    period = differenceDate.toInt()
} else {
	val startDate = org.joda.time.LocalDate(2000, 1, 1)
    val todayDate = org.joda.time.LocalDate.now()
    val differenceDate = Days.daysBetween(startDate, todayDate).days + 1
    period = differenceDate
}

 

 

 

 

✅참고

안드로이드 스튜디오 프로젝트 깃허브에 연동하기 

https://velog.io/@kiyoog02/Android-Studio%EC%99%80-GitHub-%EC%97%B0%EB%8F%99

728x90
반응형