android - val calendar = Calendar.getInstance() 和 val date = Date() 返回不正确的时间

标签 android date datetime kotlin calendar

我编写了两个函数来获取 start timeend time .结束时间始终为当前时间,开始时间始终为当前时间减去 2 秒。
这是功能代码。

private fun getStartDateTime(): String {
    val dateFormat = SimpleDateFormat(Constants.SERVER_DATE_FORMAT, Locale.getDefault())
    val calendar = Calendar.getInstance() 
    calendar.add(Calendar.SECOND, -2)
    return dateFormat.format(calendar.time)
}

private fun getEndDateTime(): String {
    val dateFormat = SimpleDateFormat(Constants.SERVER_DATE_FORMAT, Locale.getDefault())
    val date = Date()
    return dateFormat.format(date)
}
在大多数设备中,它都可以正常工作,但是当我在 中进行测试时一加6 当我调用这个函数时,它开始给我同样的时间。请参阅以下本地数据库表的屏幕截图。
enter image description here
问题 :
这些函数每 2 秒调用一次。所以开始时间和结束时间应该是唯一的。为什么我没有得到唯一的 start time 有什么原因吗?和 end time ?
编辑
在创建调用的新对象时调用这些函数,例如
val abc = ABC(xxx, xxx, xxx, getStartDateTime(), getEndDateTime())

最佳答案

这是猜测。一些可能的解释包括:

  • (不太可能。)您设备上的时钟已停止。
  • (不太可能。)Calendar.getInstance() 的实现和 Date()在该设备上缓存太多,并从陈旧的缓存中为您提供一个值。
  • 调度程序在该设备上不起作用,并且比每 2 秒更频繁地调用您的函数。作为一种可能的变体,多个调度程序正在运行,每个调度程序每 2 秒调用一次。
  • 由于某些错误,您的对象会以不同的 ID 多次插入到您的数据库中。

  • 我们没有任何信息可以让我们更接近。正如 chrylis -cautiouslyoptimistic- 在评论中所说的那样,您可以从您的函数中进行一些日志记录,以查看在您的程序运行期间它真正被调用了多少次。此外,1332 个条目与预期数量相比如何?
    顺便说一句,如果可以的话,更喜欢使用现代 Java 日期和时间 API java.time,如另一个答案的后半部分所述。如果问题确实是过期缓存,这也很有可能避免该问题。

    关于android - val calendar = Calendar.getInstance() 和 val date = Date() 返回不正确的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64096139/

    相关文章:

    android - 当在扩展对话框 Fragment 的 Fragment 中应用 onBackPressed 时

    android - 使用 Firebase 和 Flutter 的 Multi-Tenancy SaaS 应用

    shell - 在shell脚本中用日期前缀日志

    iOS 从当前日期起一个月。

    c# - 日期时间很奇怪

    python - 从 Datetime 操作创建 TimeDeltas 的 pandas 错误

    java - 无法从其他 fragment 加载 fragment

    java - java.net.SocketTimeoutException 中 "Connect timed out"和 "failed to connect to"之间的确切区别是什么?

    javascript - 在 JavaScript 中查找两个日期数组之间的差异

    java - 以秒为单位获取两个 Joda 日期之间的差异