Java 如何将小时/分钟保存到数据库SQLiteOpenHelper中?

Java 如何将小时/分钟保存到数据库SQLiteOpenHelper中?,java,android,android-sqlite,localtime,Java,Android,Android Sqlite,Localtime,如何在数据库SQLiteOpenHelper中节省小时/分钟? 时钟和分钟格式?例如:12:40或00:00只需将其保存为字符串,并在每次使用时间时按照您的意愿对其进行格式化即可 Sqlite没有DATETIME类型。您可以通过多种方式保存此类数据,如文本/字符串、整数0-1440、两个整数(一个表示小时,一个表示分钟)、长度和小数 如果只是显示文本/字符串,则选择可能取决于后续使用情况。如果要执行计算,则文本/字符串可能会导致复杂的过程(请参见下面示例中的getelapsedtimeforal

如何在数据库SQLiteOpenHelper中节省小时/分钟?
时钟和分钟格式?例如:
12:40
00:00

只需将其保存为字符串,并在每次使用时间时按照您的意愿对其进行格式化即可


Sqlite
没有
DATETIME
类型。

您可以通过多种方式保存此类数据,如文本/字符串、整数0-1440、两个整数(一个表示小时,一个表示分钟)、长度和小数

如果只是显示文本/字符串,则选择可能取决于后续使用情况。如果要执行计算,则文本/字符串可能会导致复杂的过程(请参见下面示例中的
getelapsedtimeforalltimesaint

一个要考虑的因素是SQLite DATETIME函数是如何受益的,如果是这样,那么可以明智地保存它所识别的格式之一(HH:MM(24小时钟)是这样的格式)。一本必读的书

下面是如何(也可能是如何不)节省时间的工作示例:-

数据库助手-SOD49707387DBHelper.java
  • 这包括一种插入数据的方法(但不验证数据)
    • insertTime
  • 还包括3种提取数据的方法:-
    • getAllTimesCascursor
      将所有行作为光标检索
    • getAllTimesASSTRINGRAY
      将所有行作为字符串[]检索(注意,它使用
      getAllTimesAsCursor
    • getElapsedTimeOfAllTimesAsInt
      返回最早和最晚时间之间的分钟数。这是为了演示如何转换/迎合非sqlite日期格式会变得有点复杂(注意它有缺陷,不打算使用)
    • 类/文件名很长,为方便起见,您可能会使用其他名称
:-

调用Activity-MainActivity.java
请向我们提供有关您的问题和代码的更多信息。您谈论的SQLiteOpenHelper类是什么?
public class SOD49707387DBHelper extends SQLiteOpenHelper {

    public static final String DBNAME = "mydatabase";
    public static final int DBVERSION = 1;
    public static final String TBNAME_TIME = "mytimesave";
    public static final String TIME_COL_TIME = "_time";

    SQLiteDatabase mDB;
    public SOD49707387DBHelper(Context context) {
        super(context, DBNAME, null, DBVERSION);
        mDB = this.getReadableDatabase();
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String crtsql = "CREATE TABLE IF NOT EXISTS " + TBNAME_TIME + "(" +
                TIME_COL_TIME + " TEXT" +
                ")";
        db.execSQL(crtsql);
    }

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

    }

    // Not assumes that time is valid
    public boolean insertTime(String time) {
        ContentValues cv = new ContentValues();
        cv.put(TIME_COL_TIME,time);
        return  (mDB.insert(TBNAME_TIME,null,cv) > 0);
    }

    public Cursor getAllTimesAsCursor() {
         return mDB.query(TBNAME_TIME,
                null,
                null,
                null,
                null,
                null,
                null);
    }

    public String[] getAllTimesAsStringArray() {
        Cursor csr =getAllTimesAsCursor();
        String[] rv = new String[csr.getCount()];
        while (csr.moveToNext()) {
            rv[csr.getPosition()] = csr.getString(csr.getColumnIndex(TIME_COL_TIME));
        }
        csr.close();
        return rv;
    }

    /*
     NOTE!! equates to query
         SELECT
             max((substr(_time,1,2) * 60) + substr(_time,4,2))
             -
             min((substr(_time,1,2) * 60) + substr(_time,42))
         AS elapsedminutes
         FROM mytimesave;
      NOTE!!! inherently unreliable as assumes all rows are valid
     */
    public int getElapsedTimeOfAllTimesAsInt() {
        int rv = 0;
        String result_column =
                "" +
                        "max((substr(" +
                        TIME_COL_TIME +
                        ",1,2) * 60) + substr(" +
                        TIME_COL_TIME + ",4,2))" +
                        " - " +
                        " min((substr(" +
                        TIME_COL_TIME +
                        ",1,2) * 60) + substr(" +
                        TIME_COL_TIME +
                        ",4,2))" +
                        " AS " + TIME_COL_TIME //??? hijack _time column
                ;
        Cursor csr = mDB.query(
                TBNAME_TIME,
                new String[]{result_column},
                null,
                null,
                null,
                null,
                null);
        if (csr.moveToFirst()) {
            rv = csr.getInt(csr.getColumnIndex(TIME_COL_TIME));
        }
        csr.close();
        return rv;
    }
}
public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        SO49707387(); // call method for this answer
    }

    private void SO49707387() {
        // Instantiate DBHelper instance
        SOD49707387DBHelper dbhlpr = new SOD49707387DBHelper(this);
        // Insert some data (2 rows each time App is run)
        dbhlpr.insertTime("12:00");
        dbhlpr.insertTime("08:00 AM");
        // Get database information (*1)
        CommonSQLiteUtilities.logDatabaseInfo(dbhlpr.getWritableDatabase());
        // Get all times as a Cursor
        Cursor csr = dbhlpr.getAllTimesAsCursor();
        // traverse the Cursor writing data to the log
        while (csr.moveToNext()) {
            Log.d("TIME_VIA_CURSOR",
                    csr.getString(
                            csr.getColumnIndex(
                                    SOD49707387DBHelper.TIME_COL_TIME)
                    )
            );
        }
        csr.close(); //<<< Should always close cursor when done with them

        // get all times as a String array
        String[] times = dbhlpr.getAllTimesAsStringArray();
        // traverse the array writing data to the log
        for (String s: times) {
            Log.d("TIME_VIA_ARRAY",s);
        }
        // Calculate and print the elapsed time
        // (largest time - smallest time)
        // i.e. 12:00 - 08:00 = 240 minutes = 4 hours
        Log.d("ELAPSED",
                "The elapsed time in minutes is " +
                        String.valueOf(dbhlpr.getElapsedTimeOfAllTimesAsInt())
        );
    }
}
04-08 03:33:00.055 1945-1945/? D/SQLITE_CSU: DatabaseList Row 1 Name=main File=/data/data/soanswers.soanswers/databases/mydatabase
    Database Version = 1
    Table Name = android_metadata Created Using = CREATE TABLE android_metadata (locale TEXT)
    Table = android_metadata ColumnName = locale ColumnType = TEXT Default Value = null PRIMARY KEY SEQUENCE = 0
    Table Name = mytimesave Created Using = CREATE TABLE mytimesave(_time TEXT)
    Table = mytimesave ColumnName = _time ColumnType = TEXT Default Value = null PRIMARY KEY SEQUENCE = 0
04-08 03:33:00.059 1945-1945/? D/TIME_VIA_CURSOR: 12:00
    08:00 AM
04-08 03:33:00.059 1945-1945/? D/TIME_VIA_ARRAY: 12:00
    08:00 AM
04-08 03:33:00.059 1945-1945/? D/ELAPSED: The elapsed time in minutes is 240