📱

Android:Kotlinで和暦から西暦に変換する方法

2022/09/18に公開

はじめに

本記事ではKotlinで和暦から西暦に変換する方法について説明します。
経緯としてはAndroidアプリをつくる際に、和暦を西暦に変換する必要がありました。
そこでインターネット上の技術記事をいくつか参考にしてみたのですが、上記の目的を達成するのに時間がかかってしまいました。なので、備忘録も含めて書き残します。

コード

下記がサンプルコードです。
年号を含んだ和暦をString型で関数JCtoADconverterに渡し、そして西暦に変換します。

import java.text.SimpleDateFormat
import java.util.*

fun JCtoADconverter(date: String) :String{
    // Localeを設定
    val locale = Locale("ja", "JP", "JP")
    // インスタンスを作成
    val calendar = Calendar.getInstance(locale)
    //日付の厳密性のチェック
    calendar.setLenient(true);
    /*
    ロケール、パターン、日付フォーマット記号を持つオブジェクトを生成
    GGGG:和暦 、 y:年、 M:月、 d日 
    変換前のデータフォーマット指定してインスタンスを生成
    */
    val beforeConvertDateFormat = SimpleDateFormat("GGGGy年M月d日",locale)
    // 日付をString型からData型へ変更
    val JCdate: Date = beforeConvertDateFormat.parse(date)
    // 変換後のデータフォーマット指定してインスタンスを生成
    val afterConvertDateFormat = SimpleDateFormat("yyyyMMdd")
    // 指定したフォーマットに変換(今回の場合、和暦→西暦)
    val ADdate: String = afterConvertDateFormat.format(JCdate)
    
    return ADdate
}

 fun main() {
   val result = JCtoADconverter("平成15年8月30日")
   println(result)
}

和暦を扱うため、Localeを日本に指定して、Calenderのインスタンスを作成します。

    // Localeを設定
    val locale = Locale("ja", "JP", "JP")
    // インスタンスを作成
    val calendar = Calendar.getInstance(locale)

ポイントは、関数JCtoADconverterにString型で和暦を渡しているので、それをDate型に変換します。まずSimpleDateFormatで書式を指定して、インスタンスをつくります。

    val beforeConvertDateFormat = SimpleDateFormat("GGGGy年M月d日",locale)
    // 日付をString型からData型へ変更

そして、.parseでDate型に変換します。

    val JCdate: Date = beforeConvertDateFormat.parse(date)

次に西暦に変換するため、SimpleDateFormatで新しくインスタンスを生成します。
今回の場合、yyyy:年、MM:月(先頭に0を含む)、dd:日(先頭に0を含む)といった書式を指定しています(例:1895年01月01日)。

    // 変換後のデータフォーマット指定してインスタンスを生成
    val afterConvertDateFormat = SimpleDateFormat("yyyyMMdd")

スラッシュなど区切りを入れたい場合は、下記にように指定すると良いでしょう。

    // 変換後のデータフォーマット指定してインスタンスを生成
    val afterConvertDateFormat = SimpleDateFormat("yyyy/MM/dd")

このインスタンスをつかって変換したい和暦を.formatにわたすと、指定した書式の西暦に変換できます。

    // 指定したフォーマットに変換(今回の場合、和暦→西暦)
    val ADdate: String = afterConvertDateFormat.format(JCdate)

動作確認

上記のコードをKotlin Playgroundで動かしてみると、和暦から西暦に変換できることがわかります。

おわりに

Javaでも同様のことができるかと思います。
お役に立てれば幸いです!

Discussion