【问题标题】:How to get closest time after and closest time before from list of time如何从时间列表中获取最近的时间和最近的时间
【发布时间】:2021-05-17 03:02:51
【问题描述】:

我有来自 DB 的 (dbHour, dbMin) 列表,现在我想从列表中比较当前小时和分钟,其中 dbHour 和 dbMin 最接近,这是我获取当前日期时间的代码 但不知道如何比较最近的时间。

ValueEventListener valueEventListener;
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Admins/City/"+city.getTitle());
Query query = reference.child("events").orderByChild("year").equalTo(String.valueOf(year));
  valueEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            numberModels = new ArrayList<>();
            numberModels.clear();

            if (dataSnapshot.exists()){
                for (DataSnapshot snapshot: dataSnapshot.getChildren()){
                    if (snapshot.child("date").getValue().toString().equals(String.valueOf(date)) && snapshot.child("month").getValue().toString().equals(String.valueOf(month))){
                        NumberModel numberModel = snapshot.getValue(NumberModel.class);
                        numberModels.add(numberModel);
                    }
                }
                setCurrentNumNow(holder,numberModels);
            }else{
                holder.numberTv.setText("####");
                holder.timerTv.setVisibility(View.GONE);
            }
        }
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
        }
    };
    query.addListenerForSingleValueEvent(valueEventListener);
 private void setCurrentNumNow(MainHolder holder, ArrayList<NumberModel> numberModels) {

    TreeSet<Double> times = new TreeSet<>();
    times.clear();
    for (NumberModel numberModel: numberModels){
            times.add((double)Integer.parseInt(numberModel.getHour())+(double) Integer.parseInt(numberModel.getMin())/100);
    }

    try{

        Log.d("BhaskarJha",times.toString());
        double future_time = times.ceiling(hour+(double)min/100);
        double before_time = times.lower(hour+(double)min/100);
        
        int future_hour = (int)(future_time-((double)min/100));
        int future_minute = Integer.parseInt(String.valueOf(future_time-((double)hour)))*100;
        Log.d("TimesGetting",String.valueOf((int)(future_time-((double)min/100))));
        
    }catch (Exception e){
        e.printStackTrace();
    }
}

NumberModel.class

package com.androidllc.CBLAdmin.Model;

public class NumberModel {
    private String hour, min, date, month, year, number, type, id;

public NumberModel(String hour, String min, String date, String month, String year, String number, String type, String id) {
    this.hour = hour;
    this.min = min;
    this.date = date;
    this.month = month;
    this.year = year;
    this.number = number;
    this.type = type;
    this.id = id;
}

public String getHour() {
    return hour;
}

public void setHour(String hour) {
    this.hour = hour;
}

public String getMin() {
    return min;
}

public void setMin(String min) {
    this.min = min;
}

public String getDate() {
    return date;
}

public void setDate(String date) {
    this.date = date;
}

public String getMonth() {
    return month;
}

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

public String getYear() {
    return year;
}

public void setYear(String year) {
    this.year = year;
}

public String getNumber() {
    return number;
}

public void setNumber(String number) {
    this.number = number;
}

public String getType() {
    return type;
}

public void setType(String type) {
    this.type = type;
}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public NumberModel() {
}
}

这就是 db 的样子

我只是无法从该列表中获得最接近现在的时间。

请建议是否应该对代码进行任何改进。

【问题讨论】:

  • String hour, min, date, month, year 替换为 LocalDateTime ldt 并相应地调整代码的其他部分。

标签: java time timestamp treeset


【解决方案1】:

首先计算一天中的分钟,以分钟为单位计算差异。

int minuteOfDay = hour * 60 + minute;

然后减去 2 小时/分钟对,即数据库中的数据和当前时间。消除标志。

int minuteOfDayFromDb = ...
int minuteOfDayNow = ...

int minutesFromNow = Math.abs(minuteOfDayFromDb - minuteOfDayNow);

对数据库中的每条记录执行此操作,并选择计算出的minutesFromNow 值最小的记录。

【讨论】:

  • int minuteOfDayNow 的值是多少?它的 minuteOfDay ??
  • @bhaskarjha 是的,使用hourNowminuteNow,但是您可以获取它们,例如来自LocalTime.now()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
相关资源
最近更新 更多