web-dev-qa-db-ja.com

Joda-Timeを使用して、年の2つの日付の差を計算する方法など

import Java.text.SimpleDateFormat;
import Java.util.Date;
import org.joda.time.*;

public class Test {

  public static void main(String[] args) {

String dateStart = "01/01/2000 05:30";
String dateStop = "02/2/2001 06:31";

SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm");

Date d1 = null;
Date d2 = null;

try {
    d1 = format.parse(dateStart);
    d2 = format.parse(dateStop);

    DateTime dt1 = new DateTime(d1);
    DateTime dt2 = new DateTime(d2);

    System.out.print(Years.yearsBetween(dt1, dt2).getYears() + " years, ");
    System.out.print(Months.monthsBetween(dt1, dt2).getMonths() % 52 + " months, ");
    System.out.print(Weeks.weeksBetween(dt1, dt2).getWeeks() % 4 + " weeks, ");
    System.out.print(Days.daysBetween(dt1, dt2).getDays() % 7 + " days, ");
    System.out.print(Hours.hoursBetween(dt1, dt2).getHours() % 24 + " hours, ");
    System.out.print(Minutes.minutesBetween(dt1, dt2).getMinutes() % 60 + " minutes, ");


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

}

}

Joda-Time を使用して、2つの日付間の年、月、週、日、時、分を出力したい。私の質問は、月の週数を実装する場所です(これは一定ではありません)。私の%も正しいとは思いません。

実行すると、次のようになります。

1 years, 13 months, 0 weeks, 6 days, 1 hours, 1 minutes, 
20
MrAwesome8

Period これはそのまま使用できます。

Period period = new Period(d1, d2);
System.out.print(period.getYears() + " years, ");
System.out.print(period.getMonths() + " months, ");
// ...

出力をかわいくしてもう少し制御するには、 PeriodFormatterBuilder を使用できます。

58
Rob Hruska