首先,我阅读了许多关于日期的帖子,并了解了如何获取日期和自定义日期。但我的问题是每按一次按钮我都需要当前日期。更清楚:
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()
。
例如,这是日期列表:
我写这篇文章的那一刻。您可以看到我有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);
}
第二次更新:
所以这是我的表格,其中保存了日期/时间。
如您所见,时间只显示最新的插入。
这是我数据库中的全部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;
}
答案 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)
您有两种方法:
如果你应该只在表中有一个项目(我无法想象这是这种情况)或者如果插入发生得更早,那么当你执行insert
读取返回时value是行id,在将来的更新中使用id。
int id = db.insert
db.update(..., ..., "WHERE " + FoodEntry.ID + "=?", new String[] { String.valueOf(id) } )
如果要为每个项目创建新行,请将db.update
替换为db.insert
FoodEntry.COLUMN_DATE + " asc"
对于调试数据库的东西,我真的推荐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);
以上代码很容易获得当前的日期和时间。