안드로이드 개발 팁 #31 - UTC 시간을 지역 시간으로 변환하는 함수
스팀 API를 사용하여 여러 가지 자료들을 받을 수 있는데요. 그 중 시간은 UTC 시간이기 때문에 현재 속한 지역에 맞는 시간으로 바꿔줘야 합니다. 예를 들어 한국에 있는 사용자에게는 UTC 시간이 아닌 한국 시간이 화면에 보여야 하는 것이지요. 스팀 앱을 만들어 보는 과정에 이를 위한 함수를 만들어 보았습니다.
UTC 시간을 지역 시간으로 변환하는 함수
아래와 같이 String 확장 함수로 구현했습니다. 언어는 코틀린(Kotlin)입니다.
// Precondition: The date format of this string is "yyyy-MM-dd'T'HH:mm:ss" or "yyyy-MM-dd HH:mm:ss"
fun String.fromUtcTimeToLocalTime(): String {
try {
val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
val date = sdf.parse(this.replace("T", " ").trim())
val longUtcTime = date.getTime()
val offset: Int = TimeZone.getDefault().getOffset(longUtcTime)
val longLocalTime = longUtcTime + offset
val dateLocalTime = Date().apply {
setTime(longLocalTime)
}
return sdf.format(dateLocalTime)
}
catch (e: ParseException) {
e.printStackTrace()
return ""
}
}
예를 들어, 이 함수를 한국에서 호출하면요. "2023-01-01T01:23:45"을 파라메터로 읽고 이를 "2023-01-01 10:23:45"로 변환하여 리턴합니다.
참고 자료
위 함수를 구현하기 위해 참고했던 자료를 링크로 남겨 둡니다.
https://blog.acronym.co.kr/351
지난 안드로이드 개발 팁
- #30 - Collection, MutableCollection 연산 확장 함수 filter, count, indexOfFirst, sortWith, sortedWith
- #29 - 프로젝트에 벡터 이미지 추가하기
- #28 - JSON 자료를 데이터 클래스로 자동 변환하는 방법
- #27 - 페이스북 로그인이 안 되는 문제
- #26 - 레이아웃 XML 파일에 이모지 문자 넣는 방법
- #25 - TED permission 라이브러리를 활용한 권한 요청
- #24 - EditText 뷰에 텍스트 입력하고 0.5초 후 액션 설정
- #23 - Uri 객체로부터 읽은 파라메터에서 '+' 문자가 ' '로 바뀌어 있는 문제
- #22 - RxJava 활용하여 몇초 후 코드 실행
- #21 - 맥북 아이클라우드로 프로젝트 복사 후 빌드 안 되는 문제
- #20 - 툴바 정의 방법 (1) 타이틀 및 배경색 설정
- #19 - Index corrupted 오류
- #18 - 오래된 프로젝트의 build.gradle 파일 수정
- #17 - 뷰 바인딩 적용된 프래그먼트에 데이터 바인딩 적용 후 빌드시 발생하는 오류
- #16 - 특정 일이 속하는 주의 모든 날짜를 배열로 구하는 방법
- #15 - RecyclerView에 리스트를 로딩한 후 처리할 일 작성
- #14 - RecyclerView 뷰에서 항목 클릭시 뷰가 깜빡이는 문제
- #13 - 공통으로 사용할 색상 리소스 만들고 뷰에 적용
- #12 - 코틀린 언어 변환시 추가로 수정할 build.gradle 파일들
- #11 - 리스트/배열로부터 찾을 원소의 위치 읽기
- #10 - 앱의 다크 모드 진입 막는 방법
- #9 - 데이터 바인딩/뷰 바인딩 사용하지 않을 경우 자체적으로 만드는 Views 클래스
- #8 - TextView에 linear gradient color 적용하기
- #7 - 다이얼 화면 연결하기 위해 Activity 클래스의 확장 메소드 작성
- #6 - 웹 브라우저를 여는 확장 메소드 작성
- #5 - HTML 적용된 TextView에서 링크 클릭은 어떻게 구현?
- #4 - RxJava의 Observable, Single 객체의 기본 설정 수행 메소드 정의하기
- #3 - 특정 화면 이동시 다른 화면 모두 닫기
- #2 - HTML 이스케이핑 적용된 문자 풀어주기
- #1 - TextView로 HTML 내용 보여주기
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.
Upvoted! Thank you for supporting witness @jswit.