2016-08-17 4 views
0

У меня есть два отдельных таймера в редакторе текста для времени начала и окончания. Когда я выбираю время запуска как 9: 00: am после того, как я выбираю время окончания, это не меньше начального времени. Время окончания должно быть больше, чем время начала. Предложите некоторые решения.Два таймера выбора Диалоги со временем начала и окончания

int hour=0; 
int minute=0; 
TimePickerDialog mTimePicker; 

start.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 


      mTimePicker = new TimePickerDialog(Jobcompletion.this, new TimePickerDialog.OnTimeSetListener() { 
       @SuppressLint("SetTextI18n") 
       @Override 
       public void onTimeSet(TimePicker timePicker, int hourOfDay, int selectedMinute) { 


        String AM_PM = " AM"; 
        String mm_precede = ""; 
        String hh_precede = ""; 

         if (hourOfDay >= 12) { 
          AM_PM = " PM"; 
          if (hourOfDay >= 13 && hourOfDay < 24) { 
           hourOfDay -= 12; 
          } else { 
           hourOfDay = 12; 
          } 
         } else if (hourOfDay == 0) { 
          hourOfDay = 12; 
         } 
         if (hourOfDay < 10) { 
          hh_precede = "0"; 
         } 
         if (selectedMinute < 10) { 
          mm_precede = "0"; 
         } 


         start.setText(hh_precede+hourOfDay + ":" +mm_precede + selectedMinute+ " " + AM_PM); 
        } 



      }, hour, minute, false); //12hour=false/true 
      mTimePicker.setTitle("Select StartTime"); 
      mTimePicker.show(); 

     } 
    }); 
    end.setOnClickListener(new View.OnClickListener() { 
     /* Calendar mcurrentTime = Calendar.getInstance(); 
     int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY); 
     int minute = mcurrentTime.get(Calendar.MINUTE);*/ 
     @Override 
     public void onClick(View v) { 


      mTimePicker = new TimePickerDialog(Jobcompletion.this, new TimePickerDialog.OnTimeSetListener() { 
       @SuppressLint("SetTextI18n") 
       @Override 
       public void onTimeSet(TimePicker timePicker, int hourOfDay, int selectedMinute) { 


        String AM_PM = " AM"; 
        String mm_precede = ""; 
        String hh_precede = ""; 


         if (hourOfDay >= 12) { 
          AM_PM = " PM"; 
          if (hourOfDay >= 13 && hourOfDay < 24) { 
           hourOfDay -= 12; 
          } else { 
           hourOfDay = 12; 
          } 
         } else if (hourOfDay == 0) { 
          hourOfDay = 12; 
         } 

         if (hourOfDay < 10) { 
          hh_precede = "0"; 
         } 
         if (selectedMinute < 10) { 
          mm_precede = "0"; 
         } 

         end.setText(hh_precede + hourOfDay + ":" + mm_precede + selectedMinute + " " + AM_PM); 

       } 
      }, hour, minute, false); 
       Log.e("Min",String.valueOf(minute)); 
      mTimePicker.setTitle("Select EndTime"); 
      mTimePicker.show(); 


     } 
    }); 
+0

никто помощи за ценные вопросы –

ответ

1

Во-первых, если вы делаете любой дата/время манипуляции в вашем приложении, я настоятельно рекомендую импортируемое Java 310 Backport for Android (ThreeTenABP):

compile 'com.jakewharton.threetenabp:threetenabp:1.0.3' 

Как Date и Calendar классы, предоставляемые Java 7, являются беспорядок.


Необходимо выполнить проверку самостоятельно. Простой реализацией было бы сохранение значений времени начала и окончания, а затем проверить, больше ли один из них. Этот код предполагает использование 310 Backport:

private LocalTime mStartTime; 
private LocalTime mEndTime; 

@Override 
public void onTimeSet(TimePicker picker, int hourOfDay, int minuteOfHour) { 
    mStartTime = LocalTime.of(hourOfDay, minuteOfHour); 

    if(mStartTime.isAfter(mEndTime)) { 
     // Handle case 
    } 
} 

Наконец, нет никаких причин, вы должны быть установки даты/времени тексту самостоятельно. Android обеспечивает DateUtils класса для этой цели:

long start = ZonedDateTime.of(LocalDate.now(), mStartTime, ZoneId.systemDefault()).toInstant().toEpochMilli(); 

String startTime = DateUtils.formatDateTime(this, start, DateUtils.FORMAT_SHOW_TIME); 

Это будет учитывать настройки пользователей (12 часов/24 часов), а также региональные настройки устройства.


Вот тот же код с помощью Java 7 классов:

private Date mStartTime; 
private Date mEndTime; 

@Override 
public void onTimeSet(TimePicker picker, int hourOfDay, int minuteOfHour) { 
    Calendar date = new GregorianCalendar(); 
    date.set(Calendar.HOUR_OF_DAY, hourOfDay); 
    date.set(Calendar.MINUTE, minuteOfHour); 
    mStartTime = date.getTime(); 

    if(mStartTime.after(mEndTime)) { 
     // Handle case 
    } 
} 

String startTime = DateUtils.formatDateTime(this, mStartTime.getTime(), DateUtils.FORMAT_SHOW_TIME); 
+0

хорошего ответа, за исключением того, что предложение использовать Joda-Time в качестве альтернативы java.time , Второе предложение на веб-сайте [Joda-Time] (http://www.joda.org/joda-time/) советует перейти на java.tim. Проект Joda-Time теперь находится в [режиме обслуживания] (https://en.wikipedia.org/wiki/Maintenance_mode), активно поддерживается, но никакой новой функции не работает. Как Joda-Time, так и java.time возглавляет тот же человек, Стивен Колборн. Кроме того, ThreeTenABP подходит лучше, чем Joda-Time, учитывая 65 тыс. Ограничений на количество методов Android. –

+0

@BasilBourque Вы абсолютно правильно, удалили. – Bryan

Смежные вопросы