android - 两个日期之间的差异无法正常工作?

标签 android datetime kotlin android-date

我正在尝试查找所选 date 和今天的 date 的差异是否等于或大于 18 年。

获取今天的日期是我的代码

private val simpleDateFormat = SimpleDateFormat("dd-MM-yyyy", Locale.getDefault())
    private val date = Date()
    private val todayDate = simpleDateFormat.parse(simpleDateFormat.format(date)).time
private val cal = Calendar.getInstance()

 cal.time = date
 val date = simpleDateFormat.parse("12-11-2001").time
val years = (todayDate - date) / (1000L * 60 * 60 * 24 * cal.getActualMaximum(Calendar.DAY_OF_YEAR))

现在我选择的日期是 12-11-2001 而今天的日期是 11-11-2019 所以它应该显示 17 年但它显示 18 年。即使我选择 13,14 或 15th November 2001,它显示的是 18 年而不是 17 年,但如果我选择 16th Novemeber 2001,它会显示 17 年。我无法理解为什么会发生这种行为。

最佳答案

最好使用 java.time API 来完成这类任务:

import java.time.*
import java.time.format.*
import java.time.temporal.ChronoUnit

fun main() {
    val today = LocalDate.now()
    val date = LocalDate.parse("12-11-2001", DateTimeFormatter.ofPattern("dd-MM-yyyy"))

    val diff = ChronoUnit.YEARS.between(date, today)

    println("Diff between $date and $today is $diff years")
}

如果由于 minSdkVersion 限制你还不能使用 java.time,你可以使用 ThreeTen Backport项目及其Android适配ThreeTenABP .

关于android - 两个日期之间的差异无法正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58796360/

相关文章:

android - 如何声明在 kotlin 伴随对象中声明的 native cpp 方法?

android - 启动 Dagger2,如何构建结构?

android - Android 中的 HttpPost - 无法识别的字符

c# - 如何转换此日期并保存到数据库

r - 无法在 R 中将数字转换为日期

mysql - 日期格式 .NET 到 mysql

android - 有没有办法禁用 jetpack-compose 伴奏水平寻呼机上的右侧水平滚动?

android - 从 ActionBar 中检索 fragment 内的操作布局

android - 键盘超出屏幕

Android - 现在实现选项卡的标准方法是什么?