如何将所选的hourOfDay和minute放入一个变量中与当前时间进行比较?



我试着做一个if-else语句,如果用户放了过去的时间,它会提醒用户时间已经过去了。当用户打开它时,我也无法将timemedialogpicker设置为当前时间。提前谢谢。

代码:

button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Calendar timeNow = Calendar.getInstance();
timePickerDialog = new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
int currHour = calendar.get(Calendar.HOUR_OF_DAY);
int currMin = calendar.get(Calendar.MINUTE);
Time currTime = new Time(currHour, currMin); //This part display error
if (currTime.getTimeInMillis() >= timeNow.getTimeInMillis()) { //This part display error
//it's after current
int hour = hourOfDay % 12;
} else {
//it's before current'
Toast.makeText(getApplicationContext(), "Invalid Time", Toast.LENGTH_LONG).show();
}
time = "";
time = hourOfDay+":"+minute;
Userbook book = new Userbook(temp, time);
db.collection("Booking").add(book).addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
Toast.makeText(MainActivity.this, "Note saved", Toast.LENGTH_SHORT).show();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(MainActivity.this, "Error", Toast.LENGTH_SHORT).show();
}
});
Toast.makeText(MainActivity.this, "Time is "+currHour+":"+currMin, Toast.LENGTH_SHORT).show();
}
},timeNow.get(Calendar.HOUR_OF_DAY), timeNow.get(Calendar.MINUTE),false);
timePickerDialog.show();
}
});

简写:! LocalTime.of( 10 , 20 ).isBefore( LocalTime.now() )

!LocalTime#isBefore

2014年3月随Java-8发布的java.timeAPI取代了容易出错的旧的日期时间API。从那时起,强烈建议使用这个现代日期时间API。

您可以使用LocalTime#of(int hour, int minute)获得具有给定hourminute值的LocalTime实例,然后使用LocalTime#isBefore将其与当前时间(即LocalTime#now)进行比较。

:

import java.time.LocalTime;
public class Main {
public static void main(String[] args) {
LocalTime now = LocalTime.now();
// Sample hour and minute values
int hour = 10;
int minute = 20;
LocalTime givenTime = LocalTime.of(hour, minute);
System.out.println(!givenTime.isBefore(now));
}
}

:

false

!givenTime.isBefore(now)表示givenTime等于或在now之后。

Trail: Date Time了解更多关于现代Date-Time API的信息.

解决这个问题的一种方法是将日历时间设置为new Date(),然后将小时和分钟设置为所选值。例如,

然后你可以使用Java构建的compareTo函数来比较这两个日期。如:

Calendar timeNow = Calendar.getInstance();
Date curDate = new Date();
timeNow.setTime(curDate);
timeNow.set(Calendar.HOUR_OF_DAY, hourOfDay);
timeNow.set(Calendar.MINUTE, minute);
// If you want to warn on dates being equal to current time, then 
// switch the conditional to be greater than or equal to 0, instead
// of greater than 0. 
if (curDate.compareTo(timeNow.getTime()) > 0) {
//it's after current
int hour = hourOfDay % 12;
}
...
...