【Kotlin/Android】SimpleDateFormatの使い方!日付を文字列に変換する
この記事からわかること
- Android Studio/Kotlinで日付(Date)を文字列に変換する方法
- SimpleDateFormatの使い方
- DateTimeFormatterとの違い
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
環境
- 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インターフェース
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。