2016-08-17 15 views
0

開始時間と終了時間の編集テキストに2つの別の時間ピッカーがあります。終了時間を選択した後に開始時間を9:00:amと選択すると、開始時間よりも小さくなりません。終了時間は開始時間より長くする必要があります。いくつかの解決策を提案する。 Javaの7によって提供さDateCalendarクラスがあるとして2つの時間ピッカー開始時間と終了時間を持つダイアログ

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

:アプリ内任意の日付/時刻の操作を行っている場合

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

java.timeの代替としてジョダタイムを使用しての提案を除き、いくつかの貴重な質問 –

答えて

1

まず、私は非常にJava 310 Backport for Android (ThreeTenABP)をインポートするお勧めします混乱。


あなた自身で検証を実装する必要があります。単純な実装では、開始時刻と終了時刻の値を保持し、一方が他方よりも大きいかどうかをチェックすることがあります。このコードは、310バックポートの使用を前提としています

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 
    } 
} 

最後に、日付/時刻のテキストを自分で設定しなければならない理由はありません。アンドロイドは、この目的のためにDateUtilsクラスを提供します。これは、アカウントにユーザー設定(12時間/ 24時間)、およびデバイスのロケールがかかります

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

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

。ここで


は、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ウェブサイト](http://www.joda.org/joda-time/)の2番目の文は、java.timへの移行をアドバイスしています。 Joda-Timeプロジェクトは現在[メンテナンスモード](https://en.wikipedia.org/wiki/Maintenance_mode)になっており、積極的に維持されていますが、新機能はありません。 Joda-Timeとjava.timeの両方が、同じ人物Stephen Colbourneによって率いられています。また、ThreeTenABPは、アンドロイドのメソッド数の65Kという制限を考慮すると、Joda-Timeよりも優れています。 –

+0

@BasilBourqueあなたは間違いがなく、削除されました。 – Bryan

関連する問題