0

我正在开发一个任务计划程序/时间管理器应用程序,它可以计算用户在日常活动上花费的时间。我需要从数据库中存储和检索用户活动的开始时间和结束时间。但是由于数据库模式中有很多列,所以很难实现。我没有看到处理这个问题的好方法。请提出一个更好的方法来做到这一点。

这是代码

package com.example.timejanitor;

import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class Fixed_Task_Database extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "FixedTask.db";

    public Fixed_Task_Database(Context context, String name,
            CursorFactory factory, int version) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);

    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        try {
            db.execSQL("CREATE TABLE fixedtask(_id INTEGER PRIMARY KEY AUTOINCREMENT,taskName TEXT, sHour INTEGER, sMinute INTEGER,fHour INTEGER, fMinute INTEGER,taskDay INTEGER,taskMonth INTEGER, taskYear INTEGER )");
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        db.execSQL("DROP TABLE IF EXISTS fixedtask");
        onCreate(db);
    }

}
4

1 回答 1

2

SQLite 文档指出:

SQLite 没有为存储日期和/或时间预留存储类。相反,SQLite 的内置日期和时间函数能够将日期和时间存储为 TEXT、REAL 或 INTEGER 值:

TEXT 作为 ISO8601 字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。

REAL 作为儒略日数字,根据预测的公历,自公元前 4714 年 11 月 24 日格林威治中午以来的天数。

INTEGER 作为 Unix 时间,自 1970-01-01 00:00:00 UTC 以来的秒数。

应用程序可以选择以任何这些格式存储日期和时间,并使用内置的日期和时间函数在格式之间自由转换。

您可以将其中任何一种用于您的程序。请注意,Java 在内部也使用 along来表示日期时间值。它计算自 1970-01-01 00:00:00 UTC 以来的毫秒数,因此很容易转换为 SQLite INTEGER 格式。

于 2013-11-10T08:32:40.987 回答