如何使用Joda-Time计算两个日期之间的年,月和天数

悟空:

我正在使用下面的代码来计算两个日期之间的年,月和天数 Joda-Time

public void getDateDiff(View view) {

    DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy").withLocale(Locale.US);
    DateTime startDate = null;
    DateTime endDate = null;

    // expected output 23...2....29

    try {
        startDate = formatter.parseDateTime("01/09/1995");
        endDate = formatter.parseDateTime("30/11/2018");

        Period period = new Period(startDate, endDate);

        Log.e("No Of Years : ", period.getYears() + " Years, ");
        Log.e("No Of Months : ", period.getMonths() + " Months, ");
        Log.e("No Of Days : ", period.getDays() + " Days, ");

        tvResult.setText(String.format("No Of Years : %d Years, \nNo Of Months : %d Months, \nNo Of Days : %d Days, ", period.getYears(), period.getMonths(), period.getDays()));

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


}

以上代码的预期输出是(使用此网站并在Google Play商店中使用一个应用检查

23 years, 2 months, 29 days

但是我在同一日期获得低于结果的结果

/goku.com.demo E/No Of Years :: 23 Years, 
/goku.com.demo E/No Of Months :: 2 Months, 
/goku.com.demo E/No Of Days :: 1 Days, 

谁能帮助我找到上面代码中所缺少的问题

我正在使用下面的joda-time依赖。

implementation 'joda-time:joda-time:2.9.9'

PS已检查以下链接

如果需要更多信息,请告诉我。提前致谢。您的努力将不胜感激。

MC皇帝

您的Joda时间代码不起作用的原因是,如果不提供PeriodType对象,则使用标准的PeriodType。标准期间类型定义不仅年,月,日,以被列入周期计算,而且周。而且您没有显示星期数,在您的情况下为4。如果您写了,period.getWeeks()它将返回4

为了使其工作,您必须为构造函数提供PeriodTypeas作为第三个参数Period如果将的声明更改period

Period period = new Period(startDate, endDate, PeriodType.yearMonthDay());

这样就可以了 然后,期间计算将仅使用年,月和日字段。

... java.time如果您使用的是Java 8或更高版本,则最好迁移到软件包中提供的新的Java Date and Time API 不要误会我的意思,Joda Time是一个非常好的日期和时间API。由于Java 8的质量,其日期和时间API对Joda Time的影响很大。它的主要开发人员实际上是同一个人Stephen Colebourne

但是Joda Time现在处于维护模式,并且在其网站上要求用户迁移到java.time(JSR-310)-JDK的核心部分,该项目取代了该项目。

使用Java 8日期和时间API

DateTimeFormatter f = DateTimeFormatter.ofPattern("dd/MM/yyyy").withLocale(Locale.US);

// expected output 23...2....29
LocalDate startDate = LocalDate.parse("01/09/1995", f);
LocalDate endDate = LocalDate.parse("30/11/2018", f);
Period period = Period.between(startDate, endDate);

向Java 6和7的反向移植;Android支援

大多数java.time 功能也由Stephen Colebourne领导ThreeTen-Backport项目中反向移植到Java 6和Java 7 ThreeTenABP项目中进一步适应了早期的Android API级别(低于26请参阅如何使用ThreeTenABP

请注意,Joda时间与Java日期和时间API之间存在一些差异特别是,PeriodJava Date and Time API中的类不太全面。但是,PeriodJava Date and Time API中的类提供了满足您要求的功能。


我看到使用的代码java.time实际上与@MaxXFrenzY的相同。这不是因为复制粘贴,而是因为新的Java日期和时间API的设计既明确又简单。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何计算在处理3两个给定日期之间的天数?

Joda-Time中两个日期之间的天数

如何计算两个日期之间的天数?

如何计算两个日期之间的天数

如何使用Joda-Time计算年份中两个日期之间的差异...等

如何计算两个给定日期之间的天数?

如何使用boost :: date_time获得两个日期之间的天数

如何计算两个日期之间的天数

如何计算用户通过android studio中的datepicker输入的两个日期之间的天数

使用Joda Time API计算两个日期之间的天数

如何使用熊猫获取两个日期之间的天数

计算使用Bootstrap Datepicker设置的两个日期之间的差异,以年,月和日为单位

如何计算R中一列中两个日期之间的天数

如何将单独的年和月列转换为单个日期并获得两个日期之间的月/日差

如何计算oracle中两个日期之间的天数?

计算两个日期之间的天数(不使用模块)

如何计算两个日期之间的星期数,天数

如何用条件在两个日期之间计算天数

如何通过JavaScript计算两个日期之间的月份和天数?

如何获取两个Java日期之间的天数,同时比较日期和时间

再次关于使用JavaScript计算两个日期之间的天数

如何计算两个日期之间的星期天数

在不使用软件包的情况下,如何计算python中两个日期之间的年,月,日数

如何在 postgres sql 查询中仅计算两个日期之间的天数。

如何计算没有。SQL Server 中两个日期时间列之间的天数

如何使用公历和 While 循环计算两个日期之间的天数

如何计算具有两个向量(开始日期和结束日期)和日期向量的数据框之间匹配的天数?

如何计算两个或多个日期范围之间的唯一天数

如何计算SQL中两个日期之间的年,月,日的持续时间/年龄?instituitiondate 和 nextdate 具有“日期”数据类型?