728x90
오늘은 kotlin언어로 디바이스의 시간을 런던, 도쿄, 뉴욕 시간대로 변경하는 예시를 만들어 보겠습니다.
Gradle 설정
하단의 링크를 참고해 그래들 플러그인 버전에 맞춰
아래 이미지들 처럼 build.gradle(module) 파일에 디슈거링 활성화 및 필요 라이브러리들을 추가 설정해주세요
그래들 버전별 설정법 링크 주소
https://developer.android.com/studio/write/java8-support?hl=ko#library-desugaring
이해를 위한 설명
위 이미지 처럼 안드로이드 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)}"
}
}
실행 영상
디바이스 시간을 뉴욕, 도쿄, 런던 시간대로 변경해주는 것을 확인할 수 있습니다.
'안드로이드 코틀린' 카테고리의 다른 글
[Kotlin][Android] Jetpack Compose 아이템 텍스트 수정하기 (0) | 2024.11.15 |
---|---|
[Kotilin][Android] RatingBar을 사용해서 별점만들기 (2) | 2024.11.12 |
[Kotlin][Android] Jetpack Compose 텍스트 아이템 리스트 swipe 하여 삭제하기 (0) | 2024.11.09 |
[Kotlin][Android]Toast 메시지 긴 기간 또는 짧은 기간 띄우기 (0) | 2024.10.24 |
[Kotlin][Android]textwatcher 활용해 글 변경 반응하기 (2) | 2024.10.18 |