-5

人々は実際の質問を読むよりも反対票を投じることに関心があるように見えるので、私が得るべき値は一番下のボックスにあり、私の質問はそのすぐ下にあります

ユーザーが入力した生年月日と今日の日付に基づいて、子供の年齢を見つける必要があります。ユーザーは、年齢を年、月、週、日で表示するオプションがあります。計算でうるう年が考慮されていることを確認する必要があります。さまざまなトリックを提案するいくつかの投稿を調べましたが、これまでのところ、信頼できる数値を計算するものは見つかりませんでした. 私が解決策に最も近いのは次のとおりです。

final Calendar bday = Calendar.getInstance();
bday.set(1991, 3, 27);

final Calendar today = Calendar.getInstance();

int yearsDiff = today.get(Calendar.YEAR) - bday.get(Calendar.YEAR); // yearsDiff: 24

if(bday.get(Calendar.MONTH) > today.get(Calendar.MONTH) ||
        (bday.get(Calendar.MONTH) == today.get(Calendar.MONTH) && bday.get(Calendar.DATE) > today.get(Calendar.DATE))) {
    yearsDiff --;
}

final int monthsDiff = yearsDiff * 12 + today.get(Calendar.MONTH) - bday.get(Calendar.MONTH); // monthsDiff: 296

final long timeOne = bday.getTime().getTime();
final long timeTwo = today.getTime().getTime();
final long oneDay = 1000 * 60 * 60 * 24;
final long delta = (timeTwo - timeOne) / oneDay;

final long year = delta / 365; // year: 24
final long rest = delta % 365; // rest: 232 delta: 8992
final long month = rest / 30;  // month: 7
final long rest2 = rest % 30;  // rest2: 22 rest: 232
final long weeks = rest2 / 7;  // weeks: 3
final long days = rest2 % 7;   // days: 1 rest2: 22

yearsDiff と monthsDiff はどちらも正しいです。正しい値 (2015 年 12 月 9 日現在) は次のとおりです。

 years: 24
months: 296
 weeks: 1289
  days: 9023

2 つの異なる値があることに気付くでしょう。これらの値のいくつかを計算しています。それは、さまざまな答えを調べて、最善の解決策を見つけようとしているからです。

正確な週数と日数を知るにはどうすればよいですか?

4

3 に答える 3