Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 房间SQLITE查询减去长时间戳_Android_Mysql_Sql_Sqlite_Android Sqlite - Fatal编程技术网

Android 房间SQLITE查询减去长时间戳

Android 房间SQLITE查询减去长时间戳,android,mysql,sql,sqlite,android-sqlite,Android,Mysql,Sql,Sqlite,Android Sqlite,我有一个表,它有两列:“TimeStart”和“TimeFinish” 这些列存储使用typeclassconverter从日期格式转换而来的长值 我需要编写一个查询来返回表中的所有行,但我需要计算总时间。因此,我需要减去Timestart和TimeFinish中的long值,以获得每行花费的单独时间,然后将它们相加。我想返回一个以小时为单位的值,供用户计算他们花在活动上的小时数。我不确定做这件事的最佳方式是什么。有人能帮我写一个具有上述功能的查询吗 桌子 日期转换器 public class

我有一个表,它有两列:“TimeStart”和“TimeFinish” 这些列存储使用typeclassconverter从日期格式转换而来的长值

我需要编写一个查询来返回表中的所有行,但我需要计算总时间。因此,我需要减去Timestart和TimeFinish中的long值,以获得每行花费的单独时间,然后将它们相加。我想返回一个以小时为单位的值,供用户计算他们花在活动上的小时数。我不确定做这件事的最佳方式是什么。有人能帮我写一个具有上述功能的查询吗

桌子

日期转换器

public class TimeTypeConverter {

@TypeConverter
public static Long toDate(Date date){
    return date == null ? null : date.getTime();
}

@TypeConverter
public static Date toLong(Long timestamp){
    return timestamp == null ? null : new Date(timestamp);
}

@Query(“选择(SUM(workoutEnd-workoutStart)/3600)作为tableCheckIn中的总训练,其中userId=:pkUserId”)
LiveData TotalWorkUttime(长pkUserId);
回购

public LiveData totalWorkoutTime(长用户ID){
返回feelingFitDatabase.getUsersDao().totalWorkoutTime(用户ID);
}
视图模型

  public LiveData<List<ModelStatsTotalWorkoutTime>> totalWorkoutTime(long userId) {
    return repoUsers.totalWorkoutTime(userId);
}
public LiveData totalWorkoutTime(长用户ID){
返回repoosers.totalWorkoutTime(userId);
}
碎片

  mViewModelUsers.totalWorkoutTime(pkUserId).observe(getViewLifecycleOwner(), new Observer<List<ModelStatsTotalWorkoutTime>>() {
        @Override
        public void onChanged(List<ModelStatsTotalWorkoutTime> modelStatsTotalWorkouts) {

            for(ModelStatsTotalWorkoutTime list: modelStatsTotalWorkouts){
                totalWorkoutTimeSeconds += list.getTotalWorkouts();
            }

            totalWorkoutTimeMinutes = totalWorkoutTimeSeconds / 60;
            totalWorkoutTimeHours = totalWorkoutTimeMinutes / 60;

            if (totalWorkoutTimeMinutes <= 59){
                tvTotalTimeWorkingOut.setText(""+totalWorkoutTimeMinutes);
                tvTotalTimeWorkingOutDescription.setText(getString(R.string.workout_minutes));
            } else {
                tvTotalTimeWorkingOut.setText(""+totalWorkoutTimeHours);
                tvTotalTimeWorkingOutDescription.setText(getString(R.string.workout_hours));
            }
        }
    });
}
mViewModelUsers.totalWorkoutTime(pkUserId).observe(getViewLifecycleOwner(),new Observer()){
@凌驾
更改后的公共无效(列出modelStatsTotalWorkouts){
对于(ModelStatsTotalWorkoutTime列表:modelStatsTotalWorkouts){
totalWorkoutTimeSeconds+=list.getTotalWorkouts();
}
totalWorkoutTimeMinutes=totalWorkoutTimeSeconds/60;
totalWorkoutTimeHours=totalWorkoutTimeMinutes/60;

if(totalWorkoutTimeMinutes列
TimeStart
TimeFinish
包含包含毫秒的unix历元时间戳。
在SQLite中,您可以通过以下方式以可读格式获取日期:

select 
  datetime(1596107885085 / 1000, 'unixepoch'),
  datetime(1596108413648 / 1000, 'unixepoch')
返回:

2020-07-30 11:18:05     2020-07-30 11:26:53
要获得它们在分钟内的差值,必须除以1000以去除毫秒,然后除以60:

(TimeFinish - TimeStart) / 1000 / 60
因此,您可以通过以下方法在几分钟内获得总差异:

select sum(TimeFinish - TimeStart) / 1000 / 60 from tablename

添加
.schema
信息和一些示例数据以及“所需输出”。
2020-07-30 11:18:05     2020-07-30 11:26:53
(TimeFinish - TimeStart) / 1000 / 60
select sum(TimeFinish - TimeStart) / 1000 / 60 from tablename