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
相关产品推荐
相关产品推荐

