java.time
Я думаю, вы ищете что-то вроде этого:
static DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("h:mm a", Locale.ENGLISH);
@Override
public void onTimeSet(int id, TimePicker view, int hourOfDay, int minute) {
if (id == 1 || id == 2) {
LocalTime start = LocalTime.parse(sTimeApp.getText(), timeFormatter);
LocalTime end = LocalTime.parse(eTimeApp.getText(), timeFormatter);
if (start.equals(end)) {
Toast.makeText(this, "Error , Time should be different ", Toast.LENGTH_SHORT).show();
return;
} else if (end.isBefore(start)) {
Toast.makeText(this, "Error , Time should not be before ", Toast.LENGTH_SHORT).show();
return;
}
LocalTime newTime = LocalTime.of(hourOfDay, minute);
String formattedTime = newTime.format(timeFormatter);
if (id == 1) {
sTimeApp.setText(formattedTime);
} else {
assert id == 2 : id;
eTimeApp.setText(formattedTime);
}
}
}
Если вы уже используете Joda-Time, вы можете не захотеть обновляться до java.time прямо сейчас. У Joda-Time тоже есть класс LocalTime
, который вы можете использовать так же, как я использую org.threeten.bp.LocalTime
в приведенном выше.
Я не уверен, хотели ли вы также сравнить время, установленное с помощью средства выбора времени, с временем начала или окончания, уже указанным в sTimeApp
или eTimeApp
. Я не представил такого сравнения.
Что пошло не так в вашем коде?
id == 1 && id ==2
не может быть правдой. В моем коде я предложил id == 1 || id == 2
, но, пожалуйста, проверьте, что вы хотите.
- Я подозреваю, что вы сравнили неправильно. Когда я читаю ваш код, вы выдаете сообщение об ошибке, если время начала раньше времени окончания, что я бы назвал нормальной и правильной ситуацией. В моем коде я вместо этого выдаю сообщение об ошибке, если время окончания предшествует времени начала.
- Вы, кажется, вручную форматируете время для отображения. Это слишком сложный способ. Вместо этого я использую
DateTimeFormatter
для форматирования времени (опять же, Joda-Time имеет аналогичную функциональность).
- Вы используете устаревшие
SimpleDateFormat
и Date
классы. Вместо этого я рекомендую вам использовать java.time, современный Java API даты и времени. Если вы уже используете Joda-Time, это тоже хороший вариант. В обоих случаях полностью избегайте упомянутых устаревших классов, поскольку Joda-Time или java.time предлагают все необходимые вам функции.
Вопрос: Могу ли я использовать java.time на Android?
Да, java.time
прекрасно работает на старых и новых устройствах Android. Просто требуется хотя бы Java 6 .
- В Java 8 и более поздних версиях и на более новых устройствах Android (от 26 уровня API, как мне сказали) современный API поставляется встроенным.
- В Java 6 и 7 получите ThreeTen Backport, бэкпорт новых классов (ThreeTen для JSR 310; см. Ссылки внизу).
- На (более старых) Android используется версия Android ThreeTen Backport. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из
org.threeten.bp
с подпакетами.
Ссылки