📱
Android:Kotlinで和暦から西暦に変換する方法
はじめに
本記事では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