【Kotlin/Android】SimpleDateFormatの使い方!日付を文字列に変換する
この記事からわかること
- Android Studio/Kotlinで日付(Date)を文字列に変換する方法
- SimpleDateFormatの使い方
- DateTimeFormatterとの違い
index
[open]
\ アプリをリリースしました /
環境
- Android Studio:Flamingo
- Kotlin:1.8.20
SimpleDateFormatの使い方
KotlinのSimpleDateFormatクラスは日付(Date型)を任意の形式の文字列(String型)に変換したり、文字列からDateオブジェクトに変換したりといった日時を操作できるクラスです。SimpleDateFormatクラス自体はJavaで使用されていたクラスでありKotlinでも使用できるようにラップされています。
SimpleDateFormatインスタンスを生成する際に引数にフォーマットパターンを文字列で指定してインスタンス化します。ここで指定したフォーマットパターンに基づいて日時情報を操作できるようになります。
import java.text.SimpleDateFormat
// フォーマットパターンを指定してSimpleDateFormatインスタンスを作成
val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
おすすめ記事:フォーマットパターンの種類
スレッドセーフではないので注意
SimpleDateFormatクラスはスレッドセーフではないためマルチスレッド環境で使用する際にはアプリクラッシュなどを引き起こす可能性があります。
そのためKotlin CoroutinesやRxJava/RxKotlinと使用する際は注意が必要です。
Date型からString型に変換する
@RecentlyNonNull
public final String format(@RecentlyNonNull Date date) {
throw new RuntimeException("Stub!");
}
SimpleDateFormatを使用してDate型をString型に変換するためにはformatメソッドを使用します。
import java.text.SimpleDateFormat
import java.util.Date
fun main() {
// 現在の日付を取得
val date = Date()
// フォーマットパターンを指定してSimpleDateFormatインスタンスを作成
val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
// 日付を指定したフォーマットに変換
val formattedDate = dateFormat.format(date)
println(formattedDate) // 2024-02-17 00:52:21
println(formattedDate::class) // class java.lang.String (Kotlin reflection is not available)
}
StringからDate型に変換する
@RecentlyNullable
public Date parse(@RecentlyNonNull String source) throws ParseException {
throw new RuntimeException("Stub!");
}
SimpleDateFormatを使用してString型をDate型に変換するためにはparseメソッドを使用します。
import java.text.SimpleDateFormat
import java.util.Date
fun main() {
// 取得したい日付文字列を取得
val dateString = "2024-02-18"
// 取得したい日付文字列と同じフォーマットパターンを指定
val dateFormat = SimpleDateFormat("yyyy-MM-dd")
val date = dateFormat.parse(dateString)
println(date) // Sun Feb 18 00:00:00 UTC 2024
println(date::class) // class java.util.Date (Kotlin reflection is not available)
}
DateTimeFormatterとの違い
KotlinでSimpleDateFormatと同じような役割を持ったクラスにDateTimeFormatterがあります。このクラスも日付オブジェクトをString型に変換したり、その逆も変換することが可能となっています。
SimpleDateFormatとの大きな違いは取り扱える日付オブジェクト型とスレッドセーフか否かです。
| - | SimpleDateFormat | DateTimeFormatter |
|---|---|---|
| 日付オブジェクト | java.util.Date | java.time.temporal. TemporalAccessor※ |
| スレッドセーフ | × | ⚪︎ |
※TemporalAccessorは日付や時刻、オフセット、またはこれらの組み合わせなどの時間オブジェクトへの読み取り専用アクセスを定義するフレームワークレベルのインターフェイスです。
公式リファレンス:TemporalAccessorインターフェース
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。






