首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何找到两个日期之间的年数?

如何找到两个日期之间的年数?
EN

Stack Overflow用户
提问于 2011-10-27 01:13:06
回答 12查看 111.5K关注 0票数 69

我正在尝试确定从某个日期开始的年龄段。有谁知道在Android中做这件事的一种干净的方法吗?显然,我有Java api可用,但直接的java api相当弱,我希望Android能帮我解决这个问题。

编辑:在安卓中使用Joda time的多个建议让我有点担心Android Java - Joda Date is slow和相关的问题。此外,对于这种大小的东西,引入一个没有随平台一起提供的库可能有些过头了。

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2012-04-19 01:57:40

代码语言:javascript
运行
复制
import java.util.Calendar;
import java.util.Locale;
import static java.util.Calendar.*;
import java.util.Date;

public static int getDiffYears(Date first, Date last) {
    Calendar a = getCalendar(first);
    Calendar b = getCalendar(last);
    int diff = b.get(YEAR) - a.get(YEAR);
    if (a.get(MONTH) > b.get(MONTH) || 
        (a.get(MONTH) == b.get(MONTH) && a.get(DATE) > b.get(DATE))) {
        diff--;
    }
    return diff;
}

public static Calendar getCalendar(Date date) {
    Calendar cal = Calendar.getInstance(Locale.US);
    cal.setTime(date);
    return cal;
}

注释:正如Ole V.V.注意到的,由于日历的工作方式,这不适用于在耶稣降临之前的日期。

票数 118
EN

Stack Overflow用户

发布于 2016-09-07 04:00:03

tl;dr

代码语言:javascript
运行
复制
ChronoUnit.YEARS.between( 
    LocalDate.of( 2010 , 1 , 1 ) , 
    LocalDate.now( ZoneId.of( "America/Montreal" ) ) 
)

java.time

旧的date-time类真的很糟糕,非常糟糕,以至于太阳和甲骨文都同意用java.time类取代它们。如果您对日期-时间值做了任何重要的工作,那么向您的项目中添加库是值得的。Joda-Time库非常成功并得到推荐,但现在处于维护模式。该团队建议迁移到java.time类。

java.time的大部分功能在ThreeTen-Backport中被向后移植到Java6和7中,并在ThreeTenABP中进一步适应于Android (参见)。

代码语言:javascript
运行
复制
LocalDate start = LocalDate.of( 2010 , 1 , 1 ) ;
LocalDate stop = LocalDate.now( ZoneId.of( "America/Montreal" ) );
long years = java.time.temporal.ChronoUnit.YEARS.between( start , stop );

转储到控制台。

代码语言:javascript
运行
复制
System.out.println( "start: " + start + " | stop: " + stop + " | years: " + years ) ;

开始时间: 2010-01-01 |停止时间: 2016-09-06 |年份:6

关于java.time

框架内置于Java8和更高版本中。这些类取代了麻烦的旧legacy日期时间类,如java.util.DateCalendarSimpleDateFormat

现在在maintenance mode中的项目建议迁移到java.time类。

要了解更多信息,请参阅。和搜索堆栈溢出,以获得许多示例和解释。规范为JSR 310

您可以直接与数据库交换java.time对象。使用与JDBC 4.2或更高版本兼容的JDBC driver。不需要字符串,也不需要java.sql.*类。

从哪里获取java.time类?

  • ,、、和更高版本-标准Java API的一部分,具有捆绑的实现。
    • Java9添加了一些次要功能和fixes.

  • 和.

中的

  • 大多数java.time功能已向后移植到Java6和7

    • 更高版本的Android捆绑实现的java.time类。
    • 对于较早的Android (<26),项目适配 (如上所述)。请参阅.

票数 34
EN

Stack Overflow用户

发布于 2011-10-27 01:27:16

我建议在Java语言中使用强大的Joda-Time库来处理所有与日期相关的事情。

根据需要,您可以使用Years.yearsBetween()方法。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7906301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档