我正在尝试确定从某个日期开始的年龄段。有谁知道在Android中做这件事的一种干净的方法吗?显然,我有Java api可用,但直接的java api相当弱,我希望Android能帮我解决这个问题。
编辑:在安卓中使用Joda time的多个建议让我有点担心Android Java - Joda Date is slow和相关的问题。此外,对于这种大小的东西,引入一个没有随平台一起提供的库可能有些过头了。
发布于 2012-04-19 01:57:40
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.注意到的,由于日历的工作方式,这不适用于在耶稣降临之前的日期。
发布于 2016-09-07 04:00:03
tl;dr
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 (参见)。
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 );转储到控制台。
System.out.println( "start: " + start + " | stop: " + stop + " | years: " + years ) ;开始时间: 2010-01-01 |停止时间: 2016-09-06 |年份:6

关于java.time
框架内置于Java8和更高版本中。这些类取代了麻烦的旧legacy日期时间类,如java.util.Date、Calendar和SimpleDateFormat。
现在在maintenance mode中的项目建议迁移到java.time类。
要了解更多信息,请参阅。和搜索堆栈溢出,以获得许多示例和解释。规范为JSR 310。
您可以直接与数据库交换java.time对象。使用与JDBC 4.2或更高版本兼容的JDBC driver。不需要字符串,也不需要java.sql.*类。
从哪里获取java.time类?
中的

发布于 2011-10-27 01:27:16
我建议在Java语言中使用强大的Joda-Time库来处理所有与日期相关的事情。
根据需要,您可以使用Years.yearsBetween()方法。
https://stackoverflow.com/questions/7906301
复制相似问题