You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中Kotlin+SQLite实现日期选择、存储与显示

Kotlin + SQLite 日期处理实现方案

1. 布局文件设置

在Activity布局中添加日期选择按钮和日期显示TextView:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <Button
        android:id="@+id/btnPickDate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="选择日期"/>

    <TextView
        android:id="@+id/tvDisplayDate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:textSize="18sp"/>

</LinearLayout>

2. 实现日期选择器逻辑

在Activity中绑定按钮点击事件,弹出仅选择日期的DatePickerDialog,并格式化选中的日期:

import android.app.DatePickerDialog
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import java.text.SimpleDateFormat
import java.util.*

class MainActivity : AppCompatActivity() {
    private lateinit var tvDisplayDate: TextView
    // 统一日期格式,适配SQLite TEXT字段存储
    private val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        tvDisplayDate = findViewById(R.id.tvDisplayDate)
        val btnPickDate = findViewById<Button>(R.id.btnPickDate)

        btnPickDate.setOnClickListener {
            val calendar = Calendar.getInstance()
            val year = calendar.get(Calendar.YEAR)
            val month = calendar.get(Calendar.MONTH)
            val day = calendar.get(Calendar.DAY_OF_MONTH)

            // 弹出日期选择器,仅支持年月日选择
            DatePickerDialog(this, { _, selectedYear, selectedMonth, selectedDay ->
                val selectedCalendar = Calendar.getInstance().apply {
                    set(selectedYear, selectedMonth, selectedDay)
                }
                val formattedDate = dateFormat.format(selectedCalendar.time)

                // 保存日期到SQLite并刷新显示
                saveDateToSQLite(formattedDate)
                loadAndDisplayDate()
            }, year, month, day).show()
        }

        // 页面初始化时读取已有日期显示
        loadAndDisplayDate()
    }

    // 后续实现数据库操作方法
}

3. SQLite数据库操作类

创建数据库帮助类,确保myTable中的日期字段为TEXT类型:

import android.content.ContentValues
import android.content.Context
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper

class DBHelper(context: Context) : SQLiteOpenHelper(context, "MyDatabase.db", null, 1) {
    companion object {
        private const val TABLE_NAME = "myTable"
        private const val COLUMN_DATE = "date" // 对应你数据表中的日期字段
    }

    override fun onCreate(db: SQLiteDatabase?) {
        // 若表已存在可跳过此创建语句
        val createTableSql = "CREATE TABLE $TABLE_NAME ($COLUMN_DATE TEXT)"
        db?.execSQL(createTableSql)
    }

    override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
        db?.execSQL("DROP TABLE IF EXISTS $TABLE_NAME")
        onCreate(db)
    }

    // 保存日期(示例为覆盖已有记录,需多条记录可改用insert方法)
    fun saveDate(date: String) {
        val db = writableDatabase
        val values = ContentValues().apply {
            put(COLUMN_DATE, date)
        }
        db.delete(TABLE_NAME, null, null)
        db.insert(TABLE_NAME, null, values)
        db.close()
    }

    // 读取保存的日期
    fun getSavedDate(): String? {
        val db = readableDatabase
        val cursor = db.query(TABLE_NAME, arrayOf(COLUMN_DATE), null, null, null, null, null)
        val date = if (cursor.moveToFirst()) {
            cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_DATE))
        } else {
            null
        }
        cursor.close()
        db.close()
        return date
    }
}

4. 完善Activity数据库调用方法

回到MainActivity,实现日期的保存与读取逻辑:

private fun saveDateToSQLite(date: String) {
    val dbHelper = DBHelper(this)
    dbHelper.saveDate(date)
}

private fun loadAndDisplayDate() {
    val dbHelper = DBHelper(this)
    val savedDate = dbHelper.getSavedDate()
    tvDisplayDate.text = savedDate ?: "暂无保存的日期"
}

关键说明

  • 统一使用yyyy-MM-dd格式存储日期,既符合SQLite TEXT字段的存储规范,也便于后续日期查询、排序操作。
  • 若需存储多条日期记录,修改saveDate方法为直接调用insert,并调整查询逻辑处理多条数据。
  • 确保你的myTable中已存在TEXT类型的日期字段,与代码中COLUMN_DATE对应。

内容的提问来源于stack exchange,提问作者levi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 11:57:32