Я в основном потратил 1 день на то, чтобы просто сравнить два раза, но до сих пор не получил достойного результата. Я в основном пытаюсь сравнить два разных раза, когда я хочу избежать сохранения идентификатора данных в первый раз меньше, чем во второй раз, но я не мог. Кроме того, равная часть работает плавно, а вторая часть не работает.
@Override
public void onTimeSet(int id, TimePicker view, int hourOfDay, int minute) throws ParseException {
String AM_PM = " AM";
String pattern = "HH:mm";
SimpleDateFormat format = new SimpleDateFormat(pattern);
String mm_precede = "";
if (hourOfDay >= 12) {
AM_PM = " PM";
if (hourOfDay >=13 && hourOfDay < 24) {
hourOfDay -= 12;
}
else {
hourOfDay = 12;
}
} else if (hourOfDay == 0) {
hourOfDay = 12;
}
if (minute < 10) {
mm_precede = "0";
}
if (id == 1 && id ==2) {
Date date1 = format.parse(sTimeApp.getText().toString());
Date date2 = format.parse(eTimeApp.getText().toString());
DateTime da1 = new DateTime(date1);
DateTime da2 = new DateTime(date2);
System.out.println("Date" + date1);
System.out.println("Date" + date1);
if (da1.equals(da2) ){
Toast.makeText(this, "Error , Time should be different ", Toast.LENGTH_SHORT).show();
return;
}else if (da1.isBefore(da2)){
Toast.makeText(this, "Error , Time should be different ", Toast.LENGTH_SHORT).show();
return;
}
}
// if (sTimeApp.equals(eTimeApp) ) {
// Toast.makeText(this, "Error , Time should be different ", Toast.LENGTH_SHORT).show();
// return;
// }
if (id == 1) {
if (minute <= 9) {
sTimeApp.setText(hourOfDay + ":" + mm_precede + minute + AM_PM);
} else {
sTimeApp.setText(hourOfDay + ":" + mm_precede + minute + AM_PM);
}
} else if (id == 2) {
if (minute <= 9) {
eTimeApp.setText(hourOfDay + ":" + mm_precede + minute + AM_PM);
} else {
eTimeApp.setText(hourOfDay + ":" + mm_precede + minute + AM_PM);
}
}
}
}
В качестве отступления подумайте о том, чтобы выбросить давно устаревший и общеизвестно проблемный SimpleDateFormat и его друзей и добавить ThreeTenABP в свой проект Android, чтобы использовать java.time, современный API даты и времени Java. С ним намного приятнее работать.
id == 1 && id ==2 никогда не будет правдой (вы имели в виду id == 1 || id == 2?)
Думаю, вам нужно что-то вроде этого:
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, современный API даты и времени Java. Если вы уже используете Joda-Time, это тоже хороший вариант. В обоих случаях полностью избегайте упомянутых устаревших классов, поскольку либо Joda-Time, либо java.time предлагают всю необходимую вам функциональность.Да, java.time прекрасно работает на старых и новых устройствах Android. Просто требуется как минимум Java 6.
org.threeten.bp с подпакетами.java.time.java.time.java.time для Java 6 и 7 (ThreeTen для JSR-310).LocalTime
Это класс
DateTimeот Joda-Time, который вы используете? Или доморощенный?