【问题标题】:How to calculate difference between two dates in years...etc with Joda-Time如何使用 Joda-Time 计算两个日期之间的差异...等
【发布时间】:2014-03-07 05:36:56
【问题描述】:
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 输出两个日期之间的年数、月数、周数、天数、小时数和分钟数。我的问题是我在哪里实现一个月的周数(这从来都不是恒定的)。我也不认为我的 % 是正确的。

运行时我得到:

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

【问题讨论】:

  • 如果您只使用Period,那会满足您的需求吗?
  • 句号是什么意思?我知道有持续时间、间隔和周期,但我不知道它们之间的区别。
  • “天数”是什么意思?您需要定义如何处理夏令时开始和结束时产生的 23 小时和 25 小时日。
  • 仅供参考,Joda-Time 提供了三个定义时间跨度的类:IntervaPeriodDuration。每个都有不同的角度,并且它们相互操作。我建议熟悉所有这三个。

标签: java date time jodatime


【解决方案1】:

Period 开箱即用。

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

要美化并更好地控制输出,您可以使用PeriodFormatterBuilder

【讨论】:

  • 谢谢您,您的帮助很大。
  • d1d2 应该是什么?
  • @chx101 他们是Dates,请查看问题中的代码以了解上下文。
  • 实际上,它们是org.joda.time.DateTime 实例(或者更具体地说,是ReadableInstant 的实现)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-18
  • 2014-10-01
  • 1970-01-01
  • 2011-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多