2016-06-27 16 views
7

2つの日付の間の日数を計算する必要があります。以下のコードを使用しています。問題はそれは私を返す2ですが、実際にそれは3月30日6月27日のjuneの違いは3です。あなたはそれが現在の日付と違いを含める必要があります助けてもらえますか?問題は、現在の瞬間Javaの2つの日付間の日数を計算しない

Date createdDate = new Date(); 

セットcreatedDateことである

public static long getNoOfDaysBtwnDates(String expiryDate) { 
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 
    Date expDate = null; 
    long diff = 0; 
    long noOfDays = 0; 
    try { 

     expDate = formatter.parse(expiryDate); 
     //logger.info("Expiry Date is " + expDate); 
     // logger.info(formatter.format(expDate)); 

     Date createdDate = new Date(); 
     diff = expDate.getTime() - createdDate.getTime(); 
     noOfDays = TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS); 
     long a = TimeUnit.DAYS.toDays(noOfDays); 
     // logger.info("No of Day after difference are - " + TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS)); 
     System.out.println(a); 
     System.out.println(noOfDays); 

    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

    return noOfDays; 
} 

有効期限は、2016年6月30日であり、現在の日付が2016年6月27日

+0

@AngryJS Checkout私の答え! –

答えて

7

理由は、あなたが同じ時刻形式を持つ2つの日付を引いていません。

Calendarクラスを使用して、日付を00:00:00に変更すると、日数の正確な差異が得られます。ジム・ギャリソン」answer

+0

ちょうどそれを行い、展開:)。 – AngryJS

3

あります現在の時刻と日付が含まれます。指定された書式を使用して文字列を解析すると、時刻は00:00:00に初期化されます。

のは、あなたが正確に午後六時現地時間でこれを走ったとしましょう、あなたは

createdDate = 2016-06-27 18:00:00.000 
expDate  = 2016-06-30 00:00:00.000 

で終わるの違いは、2日6時間、ない3日間です。

Java 8の新しいjava.time.*クラスを使用する必要があります。LocalDateというクラスがあり、時間帯のない日付を表しています。現在の日付を取得するための形式と、インスタンスの間隔の計算方法を取得するためのLocalDate.now()を使用して解析するメソッドが含まれています。

+0

どうすれば修正できますか?したがって、6月30日に有効期限が切れた場合は、実際に時間差ではなく日付間の差異を実際に計算する日数を3とする必要があります。 – AngryJS

+0

私の更新答えを見てください。 –

0

のpythonで指摘Calendar.get(Calendar.DAY_OF_MONTH)としての使用:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 
Date expDate = null; 
String expiryDate ="2016-06-30"; 
int diff = 0; 
try { 
    expDate = formatter.parse(expiryDate); 
    //logger.info("Expiry Date is " + expDate); 
    // logger.info(formatter.format(expDate)); 
    Calendar cal = Calendar.getInstance(); 
    int today = cal.get(Calendar.DAY_OF_MONTH); 
    cal.setTime(expDate); 
    diff = cal.get(Calendar.DAY_OF_MONTH)- today; 

} catch (ParseException e) { 
    e.printStackTrace(); 
} 
System.out.println(diff); 
+1

ニースとエレガントなソリューションですが、getDayメソッドはjdk6以降非推奨です。推奨されていません。 JDKバージョン1.1以降は、Calendar.get(Calendar.DAY_OF_MONTH)に置き換えられました。 – PyThon

+0

編集した私の答え –

+0

今、よく見えるcal.setTime(expDate)、これはクールだった! – PyThon

5

Date createdDate = new Date(); 
Calendar time = Calendar.getInstance(); 
time.set(Calendar.HOUR_OF_DAY, 0); 
time.set(Calendar.MINUTE, 0); 
time.set(Calendar.SECOND, 0); 
time.set(Calendar.MILLISECOND, 0); 
createdDate = time.getTime(); 

もっと、について説明LocalDateを使用しないのはなぜ?

import java.time.LocalDate; 
import static java.time.temporal.ChronoUnit.DAYS; 

long diffInDays(LocalDate a, LocalDate b) { 
    return DAYS.between(a, b); 
} 
関連する問題