Android中的日期差异天数

时间:2011-03-23 13:01:12

标签: android

我必须在android中找到两个日期之间的日差异, 我发现使用timemilliseconds()的天数差异 但还有其他方法可以找到差异吗?

提前

thanx

2 个答案:

答案 0 :(得分:2)

TL;博士

ChronoUnit.DAYS.between(                             // Total count of days.
    LocalDate.of( 2018 , Month.JANUARY , 23 ) ,      // Represent a certain date.
    LocalDate.now( ZoneId.of( "America/Montreal" ) ) // Determine today’s current date for a particular region (time zone).
) 

java.time

旧的Date类现在已经过时了 java.time 类。并且将日期时间跟踪为毫秒数 - 从那时开始是令人沮丧且容易出错的。

Date个对象转换为Instant。如果使用更高版本的Android,请查找添加到旧类的新方法。对于早期的Android,请使用 ThreeTen-Backport ThreeTenABP 项目'实用程序类进行转换。

Instant类代表UTC中时间轴上的一个时刻,分辨率为nanoseconds(小数部分最多九(9)位)。

由于Instant始终为UTC,因此您需要调整为时区。时区对于确定日期至关重要。对于任何给定的时刻,日期在全球范围内因地区而异。例如,在Paris France午夜后的几分钟是新的一天,而Montréal Québec中仍然是“昨天”。

continent/region的格式指定proper time zone name,例如America/MontrealAfrica/CasablancaPacific/Auckland。切勿使用诸如ESTIST之类的3-4个字母伪区域,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。

ZoneId z = ZoneId.of( "America/Montreal" ) ;

申请Instant以获得ZonedDateTime

ZonedDateTime zdt = instant.atZone( z ) ;

如果您只关心日期定义的整天,请提取LocalDate对象。

LocalDate localDate = zdt.toLocalDate() ;

获取您的其他日期,例如今天。

LocalDate today = LocalDate.now( z ) ;

使用ChronoUnit枚举计算已用完的总天数。

long days = ChronoUnit.DAYS.between( localDate , today ) ;

如果您想要计算年数,月数和日数,请使用Period类。

Period p = Period.between( localDate , today ) ;

关于 java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

答案 1 :(得分:1)

日期#的compareTo(日期)

请参阅:http://developer.android.com/reference/java/util/Date.html

如果您需要有关日期差异的更多详细信息,则可以使用http://developer.android.com/reference/java/util/Calendar.html,例如http://developer.android.com/reference/java/util/GregorianCalendar.html