【问题标题】:Getting the number of days, weeks and years when the start date and the end date are given in java获取在java中给出开始日期和结束日期的天数、周数和年数
【发布时间】:2011-10-20 11:38:08
【问题描述】:

我是 Java 新手。我想要的是当我将开始日期和结束日期作为参数传递给函数时,我想获取开始日期和结束日期之间的天数、月数和年数。

【问题讨论】:

  • 你在这方面做过什么工作吗?能否请您展示您到目前为止编写的代码(核心逻辑)?
  • 这是作业吗?请这样标记它?

标签: java date calendar


【解决方案1】:

如果你使用JodaTime,很简单:

DateTime start = // your start date
DateTime end = // your end date
int days = Days.daysBetween(start, end).getDays();
int months = Months.monthsBetween(start, end).getMonths();
int years = Years.yearsBetween(start, end).getYears();

【讨论】:

    【解决方案2】:

    tl;博士

    Period.between( 
        LocalDate.of( 2011 , 1 , 1) , 
        LocalDate.now( ZoneId.of( "America/Montreal" ) ) 
    ).toString();  // Example: P5Y4M2D
    

    java.time

    Answer by Floyd 正确但已过时。 Joda-Time 项目处于维护模式,其团队建议迁移到 java.time 类。

    LocalDate

    LocalDate 类表示没有时间和时区的日期。

    LocalDate start = LocalDate.of( 2011 , 1 , 1 );
    LocalDate stop = LocalDate.of( 2016 , 1 , 15 );
    

    ChronoUnit

    ChronoUnit 类计算经过的时间。

    long elapsedInYears = ChronoUnit.YEARS.between( start , stop );
    long elapsedInMonths = ChronoUnit.MONTHS.between( start , stop );
    long elapsedInDays = ChronoUnit.DAYS.between( start , stop );
    

    Period

    如果您想将一个时间跨度分解为若干年若干个月若干天,则使用Period 类。

    Period p = Period.between( start , stop );
    

    要获得方便的标准ISO 8601 格式化字符串表示,请调用toString。格式为PnYnMnDTnHnMnS,其中P 标记开始,T 将年-月-日与小时-分钟-秒分开。所以一个半月是P1M15D

    String output = p.toString(); 
    

    如果您希望每个部分都作为一个数字,请调用 getter 方法。

    int years = p.getYears();
    int months = p.getMonths();
    int days = p.getDays();
    

    关于java.time

    java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧日期时间类,例如java.util.Date.Calendarjava.text.SimpleDateFormat

    Joda-Time 项目现在位于maintenance mode,建议迁移到 java.time。

    要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。

    大部分 java.time 功能在ThreeTen-Backport 中向后移植到Java 6 和7,并进一步适应ThreeTenABP 中的Android(参见How to use…)。

    ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如IntervalYearWeekYearQuarter 等等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-11
      • 1970-01-01
      相关资源
      最近更新 更多