在Android

时间:2017-09-11 12:09:30

标签: android android-sqlite simpledateformat

首先,我阅读了许多关于日期的帖子,并了解了如何获取日期和自定义日期。但我的问题是每按一次按钮我都需要当前日期。更清楚:

DateFormat date = new SimpleDateFormat("MMM dd yyyy, h:mm");
String dateFormat = date.format(Calendar.getInstance().getTime());

之后我将我的Model类调用为setDate gramHelp.setDate(dateFormat); 这工作正常,但当我检查我的SQL数据库中的日期列表时,我只获得此时的当前日期和时间,而不是我保存日期的时刻。同样的问题出现在我的另一个活动中,我正在调用getDate()列出数据库中的所有日期。

DateFormat datum = new SimpleDateFormat("MMM dd yyyy, h:mm");
String date = datum.format(Calendar.getInstance().getTime());
holder.date.setText(date)

代码基本相同,这次我正在调用getTime()而不是setTime()

例如,这是日期列表:

enter image description here

我写这篇文章的那一刻。您可以看到我有5个输入,但我每隔几分钟就会这样做。不过在SQL数据库和我的列表中这是结果。

那么当我按下按钮时,如何准确地获取(保存)日期和时间?我想答案很简单,但仍无法找到它。

更新

在第一个活动中,我有FAB,点击后在SQL数据库中保存日期/时间。

 public void onClick(View v) {        
            DateFormat date = new SimpleDateFormat("MMM dd yyyy, h:mm");
            String dateFormat = date.format(Calendar.getInstance().getTime());
            GramHelp gramHelp = new GramHelp();              
            gramHelp.setDate(dateFormat);
            mDatabase.addGramTotal(gramHelp);
        }

GramHelp是我的模型类,我有所有构造函数和getter()和setter()方法。我也在从我的数据库中调用addGramTotal()函数。这是一个简单的函数,ContentValues用于在我的SQL数据库中插入值。

public void addGramTotal(GramHelp gramHelp){
    ContentValues values = new ContentValues();      
    values.put(FoodEntry.COLUMN_DATE, String.valueOf(gramHelp.getDate()));       
    SQLiteDatabase db = this.getWritableDatabase();
    db.update(FoodEntry.TABLE_NAME_HELPER, values, null, null);
}

要在SQL数据库中显示所有日期/时间,我正在使用RecyclerView。在使用RecyclerView的活动中,我正在调用另一个名为listHistory()的函数。这个函数很简单SELECT * FROM table ORDER BY COLUMN_DATE。那部分应该没问题。

在我的onBindViewHolder()方法中的RecyclerView的Adapter类中,我有:

public void onBindViewHolder(HistoryAdapter.HistoryViewHolder holder, final int position) {               
    DateFormat datum = new SimpleDateFormat("MMM dd yyyy, h:mm");
    String date = datum.format(Calendar.getInstance().getTime());
    holder.date.setText(date);     
}

第二次更新:

所以这是我的表格,其中保存了日期/时间。 screenshoot 如您所见,时间只显示最新的插入。 这是我数据库中的全部SELECT代码。您可以看到我在此表中保存了更多值。另外,我将日期设置为String,因为出于某种原因我无法获得Date(在RecyclerView Adapter方法onBindViewHolder中)。它适用于String

但问题不应该是检索日期/时间。因为每次我在表中插入新值时都会更改(更新)日期/时间。

这也是library我用来检查我的数据库。

public List<GramHelp> listHistory(){
    String sql = "SELECT * FROM " +FoodEntry.TABLE_NAME_HELPER + " ORDER BY " +FoodEntry.COLUMN_DATE + " ASC ";
    SQLiteDatabase db = this.getReadableDatabase();
    List<GramHelp> listDate = new ArrayList<>();
    Cursor cursor = db.rawQuery(sql, null);
    if (cursor.moveToFirst()){
        do {
            int id = (cursor.getInt(0));
            int id_food = (cursor.getInt(1));
            int id_menu = (cursor.getInt(2));
            double gram = cursor.getDouble(3);
            double gram_total = cursor.getDouble(4);
            String date = new String(cursor.getString(5));
            listDate.add(new GramHelp(id, id_food, id_menu, gram, gram_total, date));
        } while (cursor.moveToNext());
    }
    cursor.close();
    return listDate;
}

2 个答案:

答案 0 :(得分:0)

如果我理解你的问题,我希望你的代码看起来更像这样:

DateFormat date = new SimpleDateFormat("MMM dd yyyy, h:mm");
String dateFormatted = date.format(Calendar.getInstance().getTime());
gramHelp.setDate(dateFormatted);

阅读看起来像:

//DateFormat datum = new SimpleDateFormat("MMM dd yyyy, h:mm");
//String date = datum.format(gramHelp.getDate());
holder.date.setText(gramHelp.getDate())

其中gramHelp是一个模型。否则Calendar.getInstance().getTime()正在再次读取当前时间。

修改:

现在您已添加了其他信息,我可以看到您正在呼叫db.update而没有ID。这将导致没有更新行(如果您读取返回值,您应该看到0)

您有两种方法:

  1. 如果你应该只在表中有一个项目(我无法想象这是这种情况)或者如果插入发生得更早,那么当你执行insert读取返回时value是行id,在将来的更新中使用id。

    • int id = db.insert
    • db.update(..., ..., "WHERE " + FoodEntry.ID + "=?", new String[] { String.valueOf(id) } )
  2. 如果要为每个项目创建新行,请将db.update替换为db.insert

    • 如果您正在使用第二种方法,则需要确保在读回数据时,按ID或使用订购FoodEntry.COLUMN_DATE + " asc"
    • 读取正确的行
  3. 对于调试数据库的东西,我真的推荐Facebook Stetho。只需一行即可将其添加到项目中,您可以在计算机上查看Google Chrome中数据库的所有内容。 (所以你知道你的数据库里有什么,如果数据错误(写作)或者你的查询错误(用于阅读)可以解决问题

答案 1 :(得分:-1)

Calendar calendar = Calendar.getInstance();
    int hour = calendar.get(Calendar.HOUR);
    int minute = calendar.get(Calendar.MINUTE);
    int date = calendar.get(Calendar.DATE);
    int month2 = calendar.get(Calendar.MONTH);
    int month = month2 + 1;
    int year = calendar.get(Calendar.YEAR);

以上代码很容易获得当前的日期和时间。