如何制作TIME(HH:MM)Android的时间?

时间:2013-07-12 17:08:51

标签: android sqlite android-sqlite

我有一个“小”的问题。我有一个名为“Flights”的SQLiteDatabase(“PLB”)表。在此表中,我有一个名为"Total_Flight_Time"类型TIME的列,用于记住HH:MM format中的时间。我想做几小时和几分钟的总结。像01:20 + 01:50 = 03:10 (HH:MM)这样的东西,但我不知道怎么做。

我在stackoverflow上找到了一个代码: DBAdapter的功能:

public Cursor getTotalTime() throws SQLException {
return db.rawQuery("SELECT sum(strftime('H%:%M', Total_Flight_Time) - strftime('H%:%M', '00:00')), 'unixepoch' FROM Flights",null);
        }

主要活动中的函数调用(它应该在文本视图中显示SUM结果):

DBHelper.open();
TextView txt = (TextView)findViewById(R.id.textView22);
String total = DBHelper.getTotalTime().toString();
txt.setText(total);

但在屏幕上显示:android.database.sqlite.SQLiteCursor@41aa42b8

我如何做功能和函数调用来解决问题,我想表明HH:MM? :)

解决了! 解决方案:

DBAdapter功能:

public Cursor getTotalTime() throws SQLException {
return db.rawQuery("SELECT time(sum(strftime('%s', Total_Flight_Time) - strftime('%s','00:00:00')),'unixepoch') FROM Flights",null);

}

主要活动中的函数调用:

TextView txt = (TextView)findViewById(R.id.textView22);
        Cursor c = DBHelper.getTotalTime();

         c.moveToFirst();
         String[] names = c.getColumnNames(); // inspect this as it should have a length of 1
                 String total = c.getString(c.getColumnIndex(names[0]));

        txt.setText(total);

3 个答案:

答案 0 :(得分:1)

这是你问题的根源:

  

在此表中,我有一个名为“Total_Flight_Time”的列,类型为TIME,以HH:MM格式记忆时间。

您滥用TIME数据类型,因为您的Total_Flight_Time实际上存储的是持续时间,而不是某个时间点。将Total_Flight_Time的类型更改为integer,表示持续时间内的秒数或分钟数。然后总结你的持续时间成为整数和的一个小问题。通过一点算术,您可以将秒/分钟数转换为天,小时,分钟和秒。

答案 1 :(得分:0)

db.rawQuery(...)会返回Cursor类型,因此您调用cursor.toString()会导致您看到的内容。您需要使用Cursor类的函数来提取查询结果,然后显示结果。例如:

您可能需要将光标移动到第一行,在这种情况下它将如下所示:

  

光标c = DBHelper.getTotalTime();
  c.moveToFirst();
  String total = c.getString(0);

如果您不知道列索引(并且它不是0),请尝试:

  
    

光标c = DBHelper.getTotalTime();
    c.moveToFirst();
    String [] names = c.getColumnNames()//检查它,因为它的长度应为1
    String total = c.getString(c.getColumnIndex(names [0]));

  

如果names.length!= 1,请告诉我结果。

我认为这(或其中的一些变体)应该有所帮助。有关更多详细信息,请参阅Cursor类的文档:http://developer.android.com/reference/android/database/Cursor.html

评论回复:

  

c.moveToFirst();
   while(c.isAfterLast()== false){

     
    

Log.w(“查询测试”,“结果:”+ cur.getString(0);
    c.moveToNext();
    }

  

答案 2 :(得分:0)

SimpleDateFormat formatter = new SimpleDateFormat("HH:MM");
Date curDate = formatter.parse(DBHelper.getTotalTime().toString());
long curMillis = curDate.getTime();

然后,您可以将其添加到其他日期(再次将其转换为long)并以日期格式显示总和。