LocalTime от java.time
Date actDate = actinfo.getActDate();
ResultTable[] timeValue = RTManager.getSomethingDecodeList(date);
LocalTime actualTime = actDate.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalTime();
if (timeValue.length == 1) {
LocalTime timeFromDB = LocalTime.parse(timeValue[0].toString());
if (! actualTime.isBefore(timeFromDB)) {
System.out.println("timeFromAct is greater than or equal to timeFromDB");
} else {
System.out.println("timeFromAct is less than timeFromDB");
}
} else {
System.out.println("Unexpected number of ResultTable entries: " + timeValue.length);
}
A LocalTime
- это время суток без даты и без часового пояса. Я считаю, что это именно то, что вам нужно.
Я предположил, что getActDate
неизменно возвращает объект Date
со старым фоном. Было бы лучше, если бы вы могли изменить его так, чтобы он возвращал соответствующий тип из java.time, современного Java-API даты и времени.
При преобразовании из Date
в LocalTime
в вышеприведенном коде вам нужно будет правильно указать часовой пояс, иначе вы получите неправильные результаты. Я предварительно предположил настройку часового пояса JVM, обозначенную как ZoneId.systemDefault()
, так как SimpleDateFormat
в вашем вопросе использовал это; но это хрупко, так как настройку можно изменить из другой части вашей программы или из другой программы, работающей в той же JVM. Лучше, если вы можете указать правильный часовой пояс, например, ZoneId.of("Asia/Manila")
.
Проверьте свои предположения. RTManager.getSomethingDecodeList
обязательно вернет только 1 значение, например: [23:32:45]. Проверка стоит так дешево, и будет сложно отследить ошибку, если когда-нибудь новый программист в вашем проекте модифицирует ее, чтобы вернуть массив другой длины. Помогите, выдав полезное сообщение об ошибке в этом случае.
Используемые вами классы даты и времени - DateFormat
, SimpleDateFormat
и Date
- давно устарели и плохо разработаны. Первые два в частности известны тем, что были хлопотными. Я не вижу причин, по которым вам стоит использовать какой-либо из них, если вы можете избежать этого.
к сожалению, я не могу импортировать java.time, откуда я делаю коды.
Если вы используете хотя бы Java 6, вы можете использовать java.time.
- В Java 8 и более поздних версиях и на более новых устройствах Android (от 26 уровня API, как мне сказали) современный API поставляется встроенным.
- В Java 6 и 7 получите ThreeTen Backport, бэкпорт новых классов (ThreeTen для JSR 310; см. Ссылки внизу).
- На (более старой) версии Android используется версия Android ThreeTen Backport. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из
org.threeten.bp
с подпакетами.
Ссылки