【发布时间】: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