2014-11-14 4 views
1

Я делаю приложение, в котором я требую, чтобы пользователь выбирал время из таймера. Код, чтобы получить таймер, отлично работает. Я получаю время в строчном формате, таком как «18:24». Теперь, что я хочу, если пользователь выбирает будущее время, то тост должен быть поднят. НапримерСравнение времени в android

User Selected time from time picker="18:40" 
Current Time="18:50" 
then toast should be displayed 

Но это не происходит

Code

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // TODO Auto-generated method stub 
     super.onActivityResult(requestCode, resultCode, data); 
     if (requestCode == 1) { 
      Calendar c=Calendar.getInstance(); 
      Date currentTime; 
      String time = data.getStringExtra("TIME"); 
      SimpleDateFormat sdf=new SimpleDateFormat("kk:mm"); 
      try { 
       Date timeCompare=sdf.parse(time); 
       currentTime=c.getTime(); 
       if(timeCompare.compareTo(currentTime)==0){ 
        etStartTime.setText(time); 
       }else{ 

        Toast.makeText(mContext, "Your cannot select future time", Toast.LENGTH_SHORT).show(); 
       } 
      } catch (ParseException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
} 
+2

Время, которое пользователь выбирает в вашем примере, не в будущем ... –

ответ

1

код в строке:

Date timeCompare=sdf.parse(time); 

возвратит дату в 1970

а код в строке:

currentTime=c.getTime(); 

возвращает текущую дату в 2014

поэтому код:

if (timeCompare.compareTo(currentTime)==0) 

никогда не будет выполнен, поскольку campare равно (-1 == 0)

здесь тестовый код (я создал на кнопках как методы отладки, вместо того, чтобы использовать свой код для регистрации его в LogCat):

Button b = (Button) findViewById(R.id.button1); 
     b.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Calendar c=Calendar.getInstance(); 
       Date currentTime; 
       String time = "23:00"; 
       SimpleDateFormat sdf=new SimpleDateFormat("kk:mm"); 
       try { 
        Date timeCompare=sdf.parse(time); 
        Log.e("TEST_TAG", "timeCompare is: "+ timeCompare.toString()); 
        currentTime=c.getTime(); 
        Log.e("TEST_TAG","currentTime is: "+ currentTime.toString()); 
        Log.e("TEST_TAG", "compareTo result is: " + String.valueOf(timeCompare.compareTo(currentTime))); 
        if(timeCompare.compareTo(currentTime)==0){ 
         // setStartTime.setText(time); 
        }else{ 

         Toast.makeText(getApplicationContext(), "Your cannot select future time", Toast.LENGTH_SHORT).show(); 
        } 
       } catch (Exception e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

      } 
     }); 

результат LogCat является:

11-14 16:18:02.618: E/TEST_TAG(2137): timeCompare is: Thu Jan 01 23:00:00 EET 1970 
11-14 16:18:02.618: E/TEST_TAG(2137): currentTime is: Fri Nov 14 16:18:02 EET 2014 
11-14 16:18:02.618: E/TEST_TAG(2137): compareTo result is: -1 

, чтобы исправить это, я предлагаю, чтобы сэкономить время в данном Bandle как полная длина, как «гггг-мм-дд чч: мм: сс» затем используйте SimpleDateFormat ("yyyy-MM-dd HH: mm: ss"), как показано ниже, чтобы ваш код работал правильно.

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
Date timeCompare = sdf.parse(time); 
Date currentTime = new Date(); 
int comareResult = timeCompare.compareTo(currentTime); 
if (comareResult = 0){ 
... 
} 
+0

Сэр, как мне сэкономить время в этом формате (yyyy-MM-dd HH: mm: ss) – user3917131

0

Вы должны использовать календарь. Текущее время имеет также год и Миллис и прочее ... использование Календарь:

Calendar c1 = Calendar.getInstance(); 
    c1.setTime(date1); 
    Calendar c2 = Calendar.getInstance(); 
    c2.setTime(date2); 
    c1.set(Calendar.HOUR, c2.get(Calendar.HOUR)); 
    c1.set(Calendar.MINUTE, c2.get(Calendar.MINUTE)); 
    c2.setTime(date1); //see that before it had date2 but I just wanted the hour and minute 
    if (c1.compareTo(c2)...) 

Таким образом, вы сравниваете же год, месяц, день, центов, Миллис, но разные часы и минуты.

+0

непонятен ???? – user3917131

+0

Я не понимаю, почему мой ответ был помечен. – eduyayo

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