Androidアプリ開発 データベースで日付を扱う

どうも、tatsuです!

今回は、Androidアプリ開発で日付を扱いたい場合の方法を解説していきます。

データベースで日付を扱う方法

まず、Androidアプリ開発におけるデータベース(SQLite)を使う場合、Date型というのが存在しません。

なので、データベースにはINTEGER型で登録し、表示時に人が理解できる文字列に変換してあげる必要があります。

そこで、簡単に日付変換を扱えるメソッドをまとめたファイルの作成と、それを使って実際に登録&表示する方法を見ていきましょう!

DateConverter.kt

それではMainActivity.ktと同じ階層にDateConverter.ktというファイルを作成してください。(クラスではなくただのファイルでOKです)

中身は以下のようにします。

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

/**
 * 現在日時をLong型で取得する
 * 日付をデータベースで管理する場合は、この関数の返り値をINTEGER型のカラムに格納すればOK
 */
fun getCurrentDate() : Long{
    return System.currentTimeMillis()
}

/**
 * Long型の日付を引数にとって日付文字列を返す
 * データベースから取得した値を「yyyy/MM/dd HH:mm:ss」の形の文字列として扱うことができる
 */
fun convertLongToString(dateLong : Long) : String{
    val date = Date(dateLong)
    val simpleDateFormat = SimpleDateFormat("yyyy/MM/dd HH:mm:ss")
    return simpleDateFormat.format(date)
}

DateConverter.ktの使い方

対象のテーブルには日付を格納するためのINTEGER型のカラムが用意されていることが前提です。

今回そのカラムはcreate_dateという名前と仮定します。

データベースに日付を保存する

// 現在日時をLong型で取得
val currentDateLong = getCurrentDate()

// SQL文字列生成
val sql = "INSERT INTO ○○_TABLE(title, create_date) VALUES( 'test', $currentDateLong )"

// sqlを実行する
db.execSQL(sql)

データベースから取得したINTEGER型の日付を文字列に変換する

// データベースからINGETER型の日付を取得
val dateLong = .....

// INTEGER型からyyyy/MM/dd HH:mm:ssの形の文字列に変換する
val dateString = convertLongToString(dateLong)

まとめ

「登録日時や更新日時でソートしたい」ことって結構多いかと思います。
また、登録日時は大概のテーブルにはとりあえず入っていることが多いです。笑

いれておいて損はないので、この記事を参考に日時を管理してみてください。

それでは!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です