-1

私は人の生年月日を持っています。d1 など、もう 1 つの日付が指定されています。d1 の日付から過去 1 年間にその人が 40 歳に達したかどうかを知りたいです。日付は「yyyyMMdd」形式です

時間を見つけることに関連する何かを考えて、いくつかの減算を行ってから、それが40かどうかなどを確認します.

この計算を行う最良の方法は何ですか?

4

4 に答える 4

1

これを実現する方法は多数あります。ミリ秒や単純な減算、年への変換の使用から、Calendarオブジェクトの使用まで、さまざまな方法があります。

また、joda-time (日付を処理するための便利なサードパーティ Java API) と

カレンダーを使用してそれを行う方法は次のとおりです

@Test
public void compareDates() throws ParseException {
    Date d1 = new SimpleDateFormat("yyyyMMdd").parse("20130317");
    Date birthDate1 = new SimpleDateFormat("yyyyMMdd").parse("19700101");
    Date birthDate2 = new SimpleDateFormat("yyyyMMdd").parse("19900101");

    GregorianCalendar cd1 = new GregorianCalendar();
    cd1.setTime(d1);
    cd1.set(Calendar.YEAR, cd1.get(Calendar.YEAR)-1); // one year ago

    GregorianCalendar cbd1 = new GregorianCalendar();
    cbd1.setTime(birthDate1);

    GregorianCalendar cbd2 = new GregorianCalendar();
    cbd2.setTime(birthDate2);

    Assert.assertTrue((cd1.get(Calendar.YEAR) - cbd1.get(Calendar.YEAR)) > 40);
    Assert.assertFalse((cd1.get(Calendar.YEAR) - cbd2.get(Calendar.YEAR)) > 40);
}
于 2013-03-17T19:40:26.170 に答える
0
public class DateTester{

    private static final long MILLISECONDS_IN_YEAR = 31556926279L;

    public static void main(String[] args) {
            //Note:  These constructors are deprecated
            //I'm just using them for a quick test

    Date startDate = new Date(2013,03,01);
    Date birthday = new Date(1981,01,1981);//Returns false
    Date birthday2 = new Date(1972,03,20); //Returns true
    Date birthday3 = new Date(1973,02,27); //Test edge cases  //Returns false
    Date birthday4 = new Date(1972,02,27); //Test edge cases, //Returns false


    System.out.println(withinYear(birthday, startDate,40));
    System.out.println(withinYear(birthday2, startDate,40));
    System.out.println(withinYear(birthday3, startDate,40));
    System.out.println(withinYear(birthday4, startDate,40));


        System.out.println(withinYear(birthday, startDate,40));
        System.out.println(withinYear(birthday2, startDate,40));
    }

    public static boolean withinYear(Date birthday, Date startDate, int years){
        if(birthday.before(startDate)){
            long difference = Math.abs(birthday.getTime() - startDate.getTime());
            int yearDifference = (int) (difference/MILLISECONDS_IN_YEAR);
            return yearDifference  < (years +1) && yearDifference >= years;
        }
        return false;
    }
}
于 2013-03-17T20:06:32.960 に答える
0

getTime()ミリ秒単位で時間を返します。

long diff = d2.getTime() - d1.getTime(); // the difference in milliseconds

これらのミリ秒を年に変換することは、練習として残します。

于 2013-03-17T19:12:07.733 に答える