我正在使用下面的代码来计算两个日期之间的年,月和天数 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已检查以下链接
如果需要更多信息,请告诉我。提前致谢。您的努力将不胜感激。
您的Joda时间代码不起作用的原因是,如果不提供PeriodType
对象,则使用标准的PeriodType。该标准期间类型定义不仅年,月,日,以被列入周期计算,而且周。而且您没有显示星期数,在您的情况下为4。如果您写了,period.getWeeks()
它将返回4
。
为了使其工作,您必须为构造函数提供PeriodType
as作为第三个参数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的核心部分,该项目取代了该项目。
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.time
功能也由Stephen Colebourne领导在ThreeTen-Backport项目中反向移植到Java 6和Java 7 。在ThreeTenABP项目中进一步适应了早期的Android API级别(低于26)。请参阅如何使用ThreeTenABP。
请注意,Joda时间与Java日期和时间API之间存在一些差异。特别是,Period
Java Date and Time API中的类不太全面。但是,Period
Java Date and Time API中的类提供了满足您要求的功能。
我看到使用的代码java.time
实际上与@MaxXFrenzY的相同。这不是因为复制粘贴,而是因为新的Java日期和时间API的设计既明确又简单。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句