LoginSignup
2
3

More than 3 years have passed since last update.

KotlinでUTC標準記述の文字列を、日本時刻に変換して文字列出力

Last updated at Posted at 2019-04-13

KotlinでAndroidアプリを作っていて、WebのAPIで返ってきたUTC標準時刻で記載された文字列の日時を、日本時刻に変換して表示する方法。
文字列をDateに、Dateを文字列に、というあたりの情報は結構見つかったのですが、TimeZoneを変更して出力するというやり方は「これ」というのが見当たらず、いくつかのページを参考に試行錯誤したらできたんですが自分で忘れそうなので備忘録です。

やったこと

以下の手順で処理したらできました。

  1. UTCで書かれた文字列(私が扱っていた元データはISO8601形式だったので "yyyy-MM-dd'T'HH:mm\:ssZ" でした)を、Dateに変換
  2. DateをCalendarに変換
  3. CalendarにTimezoneをセット
  4. DateFormatを指定して、文字列を出力

実際のソースコードはこちら

import android.text.format.DateFormat
import android.icu.text.SimpleDateFormat
import java.util.*

            val df = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
            val jpCal:Calendar = Calendar.getInstance()
            jpCal.time = df.parse(item.updateDateTime)
            jpCal.timeZone = TimeZone.getTimeZone("Asia/Tokyo")
            holder.mUpdateDTView.text = DateFormat.format("MM-dd HH:mm",jpCal)

item.updateDateTime内に、例えば 2019-04-12T01:00:00Z という文字列が設定されているとして、これでmUpdateDTView.textの中には 04-12 09:00 という文字列が出力されるようになりました。

多分ですが、"Asia/Tokyo" のところを、端末の標準設定とか持ってこれれば、APIから返ってきた時刻を、その端末の現地時間に合わせて表示できるんじゃないのかなと思います。(未検証ですが…)

若干冗長な気はしているので、もっと簡単にできるよ~という方法があったら是非教えて頂きたいです。m(__)m

参考にさせていただいたサイト

https://developer.android.com/reference/android/text/format/DateFormat.html
https://qiita.com/emboss369/items/5a3ddea301cbf79d971a
https://stackoverflow.com/questions/48838992/how-to-convert-date-string-to-timestamp-in-kotlin

2
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3