動かざることバグの如し

近づきたいよ 君の理想に

kotlin-Androidで文字列⇔日付の相互変換

コピペで再利用できるように

環境

本来、JavaレベルではJava SE8に追加されたtime APIが使えるのだが、Android上で使えるのAPIレベル26以上、つまりOreo以降になる。(誰もいないw

ので今回はベーシックなSimpleDateFormatを使う SimpleDateFormatの仕様はこちら

現在時刻を取得して文字列に変換

val df = SimpleDateFormat("yyyy年MM月dd日 HH:mm")
val message = df.format(Date())
Toast.makeText(this@MainActivity, message , Toast.LENGTH_SHORT).show()

文字列の日付をDate型に変換して文字列で表示

よくあるISO 8601形式をパースする

val date_str = "2018-06-16T13:00:00+09:00"
val df = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX")
val dt = df.parse(date_str)
val df2 = SimpleDateFormat("MM/dd")
val message = df2.format(dt)
Toast.makeText(this@MainActivity, message , Toast.LENGTH_SHORT).show()

例外キャッチする場合

val date_str = "2018-06-16T13:00:00+09:00"
val df = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX")
val dt = try { df.parse(date_str) } catch (t: Throwable) { null }
if (dt != null) {
    val df2 = SimpleDateFormat("MM/dd")
    val message = df2.format(dt)
    Toast.makeText(this@MainActivity, message , Toast.LENGTH_SHORT).show()

} else {
    val message = "date is invalid"
    Toast.makeText(this@MainActivity, message , Toast.LENGTH_SHORT).show()
}