Mic*_*ine 53 java android date
我试图确定从某个日期开始的年龄.有没有人知道在Android中这样做的干净方法?我显然有Java api可用,但直接的java api非常弱,我希望Android有一些东西可以帮助我.
编辑:在Android中使用Joda时间的多个建议让我有点担心Android Java - Joda Date很慢且相关问题.此外,拉入一个未随平台一起提供的库,这个尺寸可能太大了.
sin*_*pop 100
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;
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*elo 16
我建议使用伟大的Joda-Time库来处理与Java相关的所有日期.
根据您的需要,您可以使用该Years.yearsBetween()方法.
Bas*_*que 15
ChronoUnit.YEARS.between(
LocalDate.of( 2010 , 1 , 1 ) ,
LocalDate.now( ZoneId.of( "America/Montreal" ) )
)
Run Code Online (Sandbox Code Playgroud)
旧的日期时间类真的很糟糕,太糟糕了,Sun和Oracle同意用java.time类取代它们.如果您使用日期时间值进行任何重要工作,那么在项目中添加库是值得的.Joda-Time库非常成功并推荐,但现在处于维护模式.该团队建议迁移到java.time类.
大部分的java.time功能后移植到Java 6和7 ThreeTen,反向移植,并进一步适应的Android在ThreeTenABP(见如何使用......).
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 );
Run Code Online (Sandbox Code Playgroud)
转储到控制台.
System.out.println( "start: " + start + " | stop: " + stop + " | years: " + years ) ;
Run Code Online (Sandbox Code Playgroud)
开始时间:2010-01-01 | 停止:2016-09-06 | 年:6
该java.time框架是建立在Java 8和更高版本.这些类取代麻烦的老传统日期时间类,如java.util.Date,Calendar,和SimpleDateFormat.
现在处于维护模式的Joda-Time项目建议迁移到java.time类.
要了解更多信息,请参阅Oracle教程.并搜索Stack Overflow以获取许多示例和解释.规范是JSR 310.
您可以直接与数据库交换java.time对象.使用符合JDBC 4.2或更高版本的JDBC驱动程序.不需要字符串,不需要课程.java.sql.*
从哪里获取java.time类?
该ThreeTen-额外项目与其他类扩展java.time.该项目是未来可能添加到java.time的试验场.您可以在此比如找到一些有用的类Interval,YearWeek,YearQuarter,和更多.
小智 5
我显然还不能发表评论,但我认为你可以使用 DAY_OF_YEAR 来锻炼是否应该将年份向下调整一年(从当前最佳答案复制和修改)
public static int getDiffYears(Date first, Date last) {
Calendar a = getCalendar(first);
Calendar b = getCalendar(last);
int diff = b.get(Calendar.YEAR) - a.get(Calendar.YEAR);
if (a.get(Calendar.DAY_OF_YEAR) > b.get(Calendar.DAY_OF_YEAR)) {
diff--;
}
return diff;
}
public static Calendar getCalendar(Date date) {
Calendar cal = Calendar.getInstance(Locale.US);
cal.setTime(date);
return cal;
}
Run Code Online (Sandbox Code Playgroud)
同样,您可能只需比较时间的毫秒表示并除以一年中的毫秒数。只需将所有内容保留为长整型,在大多数情况下(闰年,哎哟)就足够了,但这取决于您的应用程序的年数以及该函数的性能必须如何,是否值得进行这种黑客攻击。
| 归档时间: |
|
| 查看次数: |
86294 次 |
| 最近记录: |