我必须在android中找到两个日期之间的日差异, 我发现使用timemilliseconds()的天数差异 但还有其他方法可以找到差异吗?
提前thanx
答案 0 :(得分:2)
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).
)
旧的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/Montreal
,Africa/Casablanca
或Pacific/Auckland
。切勿使用诸如EST
或IST
之类的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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance 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