2014-01-06 4 views
0

Почему я получаю следующие результаты?Разница между двумя датами в днях

today  = 2014-01-06 
selected_day = 2014-01-06 

результат 0

today  = 2014-01-06 
selected_day = 2014-01-07 

результат 0

today  = 2014-01-06 
selected_day = 2014-01-08 

результат 1

DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 
Date d1 = df.parse(today); 
Date d2 = df.parse(selected_date); 
Calendar c1 = Calendar.getInstance(); 
c1.setTime(d1); 
Calendar c2 = Calendar.getInstance(); 
c2.setTime(d2); 
long diff = c1.getTimeInMillis() - c2.getTimeInMillis(); 
System.out.println(diff/(24 * 60 * 60 * 1000)); 
+0

Итак, теперь вы изменили его в своем коде. ошибка была ошибкой при копировании в stackoverflow? –

+0

Вы решили свою проблему? Если да, то, пожалуйста, примите ответ, чтобы сообщить нам, что проблема решена, а также оценить ответчика :) –

ответ

3

Поскольку вы устанавливаете обе даты в том же календарном экземпляра

Calendar c2 = Calendar.getInstance(); 
c1.setTime(d2); // this is wrong :) 

изменение второй с1 до с2;)

1

вы можете установить, как этот путь

cal.set(2008, 8, 1); 

использовать как таким образом

long diff = daysBetween(cal1.getTime(),cal2.getTime()); 

public int daysBetween(Date d1, Date d2){ 
      return (int)((d2.getTime() - d1.getTime())/(1000 * 60 * 60 * 24)); 
     } 
+0

Это будет работать, если в течение дня не будет * времени. И использование устаревшего метода раздражает, если вы используете IDE, например eclipse. – TwilightSun

+0

, если вы не разделите его (1000 * 60 * 60 * 24), то вы также можете получить время. –

+0

Нет Я имею в виду, если указано время, например 20 часов 2008-8-11 и 8 часов 2008-8-12, вы получите 0, потому что разница во времени не полный день. – TwilightSun

0

На первой инстанции я неправильно понял точную проблему. Теперь, когда я ясно понимаю эту сторону, я подумал о том, чтобы поместить некоторую информацию относительно того же.

Получение разницы учитывая дату как параметр .. попробуйте вот так.

public static int getDaysDifference(Date fromDate,Date toDate) 
{ 
if(fromDate==null||toDate==null) 
return 0; 

return (int)((toDate.getTime() - fromDate.getTime())/(1000 * 60 * 60 * 24)); 
} 

Получение разницы учитывая календарь как параметр .. попробуйте вот так.

public static int getDaysDifference(Calendar calendar1,Calendar calendar2) 
{ 
if(calendar1==null||calendar2==null) 
return 0; 

return (int)((calendar2.getTimeInMillis() - calendar1.getTimeInMillis())/(1000 * 60 * 60 * 24)); 
} 

Просто передайте ему значение. :)

Теперь, если вам нужно проверить разницу с некоторыми значениями и U нужно положить какое-либо условие, то U может попытаться использовать функцию CompareTo для этого ..

Фаллоу нижеприведенный ..

Определить переменные как это ..

java.util.Date d1; 
java.util.Date d2; 

Ваша функция, как это ..

public long compareTo(Date d1, Date d2) { 
     // TODO Auto-generated method stub 
     return d1.getTime() - d2.getTime(); 

    } 

Теперь, когда вам нужно использовать это. Попробуйте вот так:

try{ 

         SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); 

         try { 
          d1 = sdf.parse(pDisplayDate.getText().toString()); 
          d2 = sdf.parse(current_day_validate); 
         } catch (ParseException e1) { 
          // TODO Auto-generated catch block 
          e1.printStackTrace(); 
         } 

         /*System.out.println("1. " + sdf.format(d1).toUpperCase()); 
         System.out.println("2. " + sdf.format(d2).toUpperCase());*/ 

         if(compareTo(d1, d2) >= 0){ 
          sm = new SessionManagement(getApplicationContext()); 

          if (service_recog_id == 1) { 
           request_url = StaticVars.service_url; 
           new BussinessOwnerHttpAsyncTask().execute(); 
          } else if (recognition_id == 3) { 
           request_url = StaticVars.business_owner_url; 
           new BussinessOwnerHttpAsyncTask().execute(); 
          } else if (recognition_id == 4) { 
           request_url = StaticVars.service_provider_url; 
           new BussinessOwnerHttpAsyncTask().execute(); 
          } else if (recognition_id == 6) { 
           request_url = StaticVars.service_category_url; 
           new BussinessOwnerHttpAsyncTask().execute(); 
          } 
         }else{ 
// Your other stuff 
} 
}catch(Exception e){ 
// Your exception 
} 
+0

он хочет разницу, а не только знать, что перед другим :) –

+1

Я бы дал вам -1, если бы мог. Прочтите вопрос. – TwilightSun

+0

Yup .. Я попытался положить больше, чем это. :) @TwilightSun .. Порадует ваш -1 :) – AndroidHacker

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