Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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 使用领域查询给定月份的数据_Android_Database_Realm - Fatal编程技术网

Android 使用领域查询给定月份的数据

Android 使用领域查询给定月份的数据,android,database,realm,Android,Database,Realm,我使用realm在本地存储数据 我想获取特定月份的数据。i、 e仅显示1月份的数据 字段类型为日期 在Sqllite中,我们可以使用strftime('%m',column_name)='05'但在领域中,我们找不到任何解决方案 谢谢。您需要为1月1日(年)00:00:00:000和2月1日(年)00:00:00:000(例如使用日历API)设置日期,并使用 然后 那你就可以了 RealmResults<Obj> results = realm.where(Obj.class).eq

我使用realm在本地存储数据

我想获取特定月份的数据。i、 e仅显示1月份的数据

字段类型为日期

在Sqllite中,我们可以使用strftime('%m',column_name)='05'但在领域中,我们找不到任何解决方案


谢谢。

您需要为1月1日(年)00:00:00:000和2月1日(年)00:00:00:000(例如使用日历API)设置日期,并使用

然后

那你就可以了

RealmResults<Obj> results = realm.where(Obj.class).equalTo("month", "January").findAll();
RealmResults results=realm.where(Obj.class).equalTo(“月”、“一月”).findAll();

给定年份中的1月?@EpicPandaForce我不想与年比较,因为我想以月为单位显示数据。我不想与年比较,因为我想以月为单位显示数据。啊,这不是那么简单。但我编辑我的答案是为了取笑伊坦克斯,@EpicPandaForce。让我试试……哪个更方便?我个人认为第二个更容易。是的,应用了第二个逻辑。但我必须在所有有日期字段的模型中执行。
public class Obj extends RealmObject {
    @Index
    private Date date;

    //getters, setters
}
Date minimumDate = realm.where(Obj.class).minimumDate();
Date maximumDate = realm.where(Obj.class).maximumDate();
Calendar minCalendar = Calendar.getInstance();
Calendar maxCalendar = Calendar.getInstance();
if(minimumDate == null) {
    minimumDate = new Date();
}
if(maximumDate == null) {
    maximumDate = new Date();
}
minCalendar.setTime(minimumDate);
maxCalendar.setTime(maximumDate);
int minimumYear = minCalendar.get(Calendar.YEAR);
int maximumYear = maxCalendar.get(Calendar.YEAR);
Calendar transientCalendar = Calendar.getInstance();
transientCalendar.set(Calendar.DAY_OF_MONTH, 1);
transientCalendar.set(Calendar.HOUR_OF_DAY, 0);
transientCalendar.set(Calendar.MINUTE, 0);
transientCalendar.set(Calendar.SECOND, 0);
transientCalendar.set(Calendar.MILLISECOND, 0);

RealmQuery<Obj> query = realm.where(Obj.class);
boolean isFirst = true;
for(int i = minimumYear; i <= maximumYear; i++) {
   if(isFirst) {
      isFirst = false;
   } else {
      query.or();
   }
   query.beginGroup();
   transientCalendar.set(Calendar.YEAR, i);
   transientCalendar.set(Calendar.MONTH, Calendar.JANUARY);
   query.greaterThanOrEqualTo("date", transientCalendar.getTime());
   transientCalendar.set(Calendar.MONTH, Calendar.FEBRUARY);
   query.lessThan("date", transientCalendar.getTime());
   query.endGroup();
}
// then you can do
RealmResults<Obj> results = query.findAllSorted("date", Sort.ASCENDING);
public class Obj extends RealmObject {
    private Date date;

    @Index
    private String month;

    public String getMonth() {
        return month;
    }

    @Deprecated
    public void setMonth(String month) {
        this.month = month;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
        if(date == null) {
            this.month = null;
        } else {
            this.month = new SimpleDateFormat("MMMMM", Locale.US).format(date);
        }
    }
}
RealmResults<Obj> results = realm.where(Obj.class).equalTo("month", "January").findAll();