본문 바로가기
안드로이드 코틀린

[Kotlin][Android] 디바이스 시간 여러 지역 시간으로 변경하기

by teamnova 2024. 11. 11.
728x90

오늘은 kotlin언어로 디바이스의 시간을 런던, 도쿄, 뉴욕 시간대로 변경하는 예시를 만들어 보겠습니다.



 

 

Gradle 설정

하단의 링크를 참고해 그래들 플러그인 버전에 맞춰

아래 이미지들 처럼 build.gradle(module) 파일에 디슈거링 활성화 및 필요 라이브러리들을 추가 설정해주세요

 

그래들 버전별 설정법 링크 주소

https://developer.android.com/studio/write/java8-support?hl=ko#library-desugaring

디슈거링 코어 라이브러리 활성화
Java 8 이상에서 지원해주는 API, 즉 표준 기능들을 사용하기위한 필수 라이브러리 추가

 

 

이해를 위한 설명

 

위 이미지 처럼 안드로이드 API 26 레벨 미만인 경우 자바 8버전에서 기본 제공하는 java.time 패키지 등 여러 기능을 지원받지 못합니다.

앞서 말한 그래들 설정을 하게되면 Java 8 버전, Java 11 버전의 일부 기능들을 저 레벨 안드로이드 버전들에서도 지원받을 수 있게 됩니다.

지금 만들 예시에서 사용할 java.time 패키지를 저 레벨 안드로이드 버전에서도 사용할 수 있게 하기위한 조치라 보시면 됩니다.

 

 

 

 

 

 

액티비티용 레이아웃 xml 파일 코드 (activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="16dp">

    <!-- 런던 버튼 -->
    <Button
        android:id="@+id/buttonLondon"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="런던 시간 보기"
        android:layout_marginBottom="8dp" />

    <!-- 도쿄 버튼 -->
    <Button
        android:id="@+id/buttonTokyo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="도쿄 시간 보기"
        android:layout_marginBottom="8dp" />

    <!-- 뉴욕 버튼 -->
    <Button
        android:id="@+id/buttonNewYork"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="뉴욕 시간 보기"
        android:layout_marginBottom="16dp" />

    <!-- 디바이스 시간을 표시하는 TextView -->
    <TextView
        android:id="@+id/deviceTimeTextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="디바이스 시간 표시"
        android:textSize="18sp"
        android:layout_marginBottom="16dp" />

    <!-- 선택된 지역과 시간을 표시하는 TextView -->
    <TextView
        android:id="@+id/regionTimeTextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="버튼의 지역 시간 정보 표시"
        android:textSize="18sp" />

</LinearLayout>

 

 

 

액티비티 코틀린 코드

class MainActivity : AppCompatActivity() {

    private lateinit var buttonLondon: Button
    private lateinit var buttonTokyo: Button
    private lateinit var buttonNewYork: Button
    private lateinit var deviceTimeTextView: TextView
    private lateinit var regionTimeTextView: TextView

    // 보여줄 시간 형식 설정 및 해당 정보 변수에 할당
    private val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 뷰 초기화
        buttonLondon = findViewById(R.id.buttonLondon) //런던 시간 보기 용 버튼
        buttonTokyo = findViewById(R.id.buttonTokyo) //도쿄 시간 보기 용 버튼
        buttonNewYork = findViewById(R.id.buttonNewYork) //뉴욕 시간 보기 용 버튼
        deviceTimeTextView = findViewById(R.id.deviceTimeTextView) //기기 시간 보여줄 텍스트뷰
        regionTimeTextView = findViewById(R.id.regionTimeTextView) //지역 시간 보여줄 텍스트뷰

        // 런던 시간 보기 용 버튼 이벤트 설정
        buttonLondon.setOnClickListener {
            updateTimes("Europe/London", "런던")
        }

        //도쿄 시간 보기 용 버튼 이벤트 설정
        buttonTokyo.setOnClickListener {
            updateTimes("Asia/Tokyo", "도쿄")
        }

        //뉴욕 시간 보기 용 버튼 이벤트 설정
        buttonNewYork.setOnClickListener {
            updateTimes("America/New_York", "뉴욕")
        }
    }

    //기기 시간 기준 지역별 시간 정보 업데이트 메서드
    private fun updateTimes(zoneIdString: String, regionName: String) {
        // 디바이스의 현재 시간 가져오기
        val deviceDateTime = ZonedDateTime.now()
        val deviceZone = ZoneId.systemDefault()

        // 디바이스 시간 표시
        deviceTimeTextView.text = "디바이스 시간 (${deviceZone.id}): ${deviceDateTime.format(formatter)}"

        // 선택된 지역의 시간으로 변환
        val regionZoneId = ZoneId.of(zoneIdString)
        val regionDateTime = deviceDateTime.withZoneSameInstant(regionZoneId)

        // 선택된 지역 시간 표시
        regionTimeTextView.text = "$regionName 시간 (${zoneIdString}): ${regionDateTime.format(formatter)}"
    }
}



 

 

 

 

 

 

 

 

실행 영상

 

디바이스 시간을 뉴욕, 도쿄, 런던 시간대로 변경해주는 것을 확인할 수 있습니다.