1

申し訳ありませんが、日付MonthsDays残りをコーディングしようとしましたが、残念ながら間違った結果が得られました。どんな助けでもいただければ幸いです。ありがとう!

SimpleDateFormat formatter= new SimpleDateFormat("dd-MM-yyyy");
String sdate    = "08-02-2016";
String edate     = "02-02-2017";   

Date startdate = formatter.parse(sdate);
Date enddate   = formatter.parse(eddate );

Calendar startCalendar = new GregorianCalendar();
startCalendar.setTime(startdate);

Calendar endCalendar = new GregorianCalendar();
endCalendar.setTime(enddate);

int diffYear = endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR); //effdate -   currdate
int diffMonth = diffYear * 12 + endCalendar.get(Calendar.MONTH) -startCalendar.get(Calendar.MONTH); 
int diffDay= endCalendar.get(Calendar.DAY_OF_MONTH) -startCalendar.get(Calendar.DAY_OF_MONTH); 

期待効果:11ヶ月25日

P/s : JodaTime は該当しません。

4

2 に答える 2

1

信頼性の高い結果を得るには、堅牢な API を使用することを強くお勧めしますが、手動で行うことを主張する場合は、次の方法を試してください。正しい結果が得られるようです (少なくともテスト ケースでは)。

    SimpleDateFormat formatter= new SimpleDateFormat("dd-MM-yyyy");
    String CURRDATE    = "08-02-2016";
    String EFFDATE     = "02-02-2017";   

    Date startdate = formatter.parse(CURRDATE);
    Date enddate   = formatter.parse(EFFDATE);

    Calendar startCalendar = new GregorianCalendar();
    startCalendar.setTime(startdate);

    Calendar endCalendar = new GregorianCalendar();
    endCalendar.setTime(enddate);

    int monthCount = 0;
    int firstDayInFirstMonth = startCalendar.get(Calendar.DAY_OF_MONTH);
    startCalendar.set(Calendar.DAY_OF_MONTH, 1);
    endCalendar.add(Calendar.DAY_OF_YEAR, -firstDayInFirstMonth+1);

    while (!startCalendar.after(endCalendar)) {     
        startCalendar.add(Calendar.MONTH, 1);
        ++monthCount;
    }

    startCalendar.add(Calendar.MONTH, -1); --monthCount;
    int remainingDays = 0;
    while (!startCalendar.after(endCalendar)) {
        startCalendar.add(Calendar.DAY_OF_YEAR, 1);
        ++remainingDays;
    }

    startCalendar.add(Calendar.DAY_OF_YEAR, -1);
    --remainingDays;

    int lastMonthMaxDays = endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH);
    if (remainingDays >= lastMonthMaxDays) {
        ++monthCount;
        remainingDays -= lastMonthMaxDays;
    }

    int diffMonth = monthCount; 
    int diffDay = remainingDays; 

    System.out.println("diffMonth==="+diffMonth +" Month(s) and " + diffDay + " Day(s)");
于 2014-11-20T07:59:10.197 に答える
0

私は直接あなたがz日y時間x分のように得ることができないと思います

しかし、あなたは別々の日分秒を得ることができ、以下のようなすべてを得ることができます -

    long diff = EFFDAT.getTime() - CURRDATE.getTime();
    long diffSeconds = diff / 1000 % 60;
    long diffMinutes = diff / (60 * 1000) % 60;
    long diffHours = diff / (60 * 60 * 1000);
    int diffInDays = (int) ((dt2.getTime() - dt1.getTime()) / (1000 * 60 * 60 * 24));

更新しました

それが役に立てば幸いです-Java 8が必要だと思います

LocalDate today = LocalDate.now();
LocalDate birthday = LocalDate.of(1960, Month.JANUARY, 1);

Period p = Period.between(birthday, today);
long p2 = ChronoUnit.DAYS.between(birthday, today);

System.out.println("You are " + p.getYears() + " years, " + p.getMonths() + " months, and " + p.getDays() + " days old. (" + p2 + " days total)");

参照オラクルページ

于 2014-11-20T03:50:14.337 に答える