计算两个sqlite列之间的时差并在Edittext上显示结果

时间:2017-03-20 16:14:45

标签: android android-sqlite

我有一个名为“Att_Table”的SQLite表,有5列:

  • ID
  • 名称
  • 日期
  • timein
  • 超时

我已经通过两个不同的Activity(使用insert和update)在这些列中插入了数据。现在,我想计算timeouttimein列之间的时差,以便计算总工时。

我还想在EditText中显示该结果。

此方法位于DatabaseHelper类中:

  public Cursor workinghours() {
                final String TABLE_NAME = "attendance";
                SQLiteDatabase db  = this.getReadableDatabase();
                String selectQuery = "SELECT  total(strftime('%s', timeout) - strftime('%s', timein) FROM"  +TABLE_NAME+  "WHERE _id='2' ";
                Cursor cursor      = db.rawQuery(selectQuery, null);
                return cursor;
 }

模拟器在查询中显示错误(语法错误)。我是android编程的新手,我在互联网上找不到关于这个主题的任何教程,所以我尝试了自己的一些代码。

此方法处于活动状态:

 public  void working_hours() {

        Cursor result = mydb.workinghours();
        w_hours.setText(result.toString());

    }

w_hours是EditText,我想在其中显示总工作时间。

我是新来的,对不起,如果我做了些蠢事。

1 个答案:

答案 0 :(得分:0)

SQLite将datetime存储为String。这就是为什么你的代码不起作用的原因,因为字符串不能相互减去。

您需要将String时间解析为Java Time对象,然后用Java而不是SQLite计算差异。

以下方法可以提供帮助。您需要以24小时格式保存时间字符串以获得最佳效果。

public static String getTimeDuration(String StartTime24, String EndTime24)
{
String duration = "";

    try 
    {
        SimpleDateFormat parseFormat = new SimpleDateFormat("HH:mm");
        Date startTime = parseFormat.parse(StartTime24);
        Date endTime = parseFormat.parse(EndTime24);

        long mills = endTime.getTime() - startTime.getTime();
        long minutes = mills/(1000 * 60);

        duration = "Difference is: " + minutes + " Minutes";
    }
    catch(ParseException ex)
    {
        // exception handling here
    }

    return duration;
}