java - 转换后如何修复丢失的日期时间?

标签 java android date kotlin

我想测试我的 DateUtil 类,但出现错误 - 在将我的 Date 转换为 String 并返回 Date 后,我丢失了大约 900秒。

这是我的代码:

  fun convertStringToDate() {
    // here I get current Date
    val currentDate = Date() // 1514285741928
    // see apiDateFormatter declaration below this code
    val dateStr = apiDateFormatter.format(currentDate) // Tue, 26 Dec 2017 12:55:41 GMT+02:00
    // see convertStringToDate() method declaration below this code
    val convertedDate = DateUtil.convertStringToDate(dateStr) // 1514285741000
    assertEquals(currentDate == convertedDate, true)
}

apiDateFormatter

val DATE_FORMAT = "EEE, dd MMM yyyy HH:mm:ss zzz"
val apiDateFormatter = SimpleDateFormat(DATE_FORMAT, Locale.ENGLISH)

DateUtil.convertStringToDate(dateStr)

fun convertStringToDate(dateStr: String): Date {
    return apiDateFormatter.parse(dateStr)
}

currentDateconvertedDate 之间的差异约为 900 秒。

为什么以及如何解决

最佳答案

您拥有的两个 UNIX 纪元时间戳实际上以 毫秒 为单位,而不是秒。这是两个值:

1514285741928 - before
1514285741000 - after

两个时间戳之间的差值,以 928 毫秒为单位。所发生的只是毫秒部分被截断了。当您在此行应用秒级精度日期掩码时发生截断:

val dateStr = apiDateFormatter.format(currentDate)

要解决这个问题,您可以尝试更改您的 SimpleDateFormat 掩码以包括毫秒:

val DATE_FORMAT = "EEE, dd MMM yyyy HH:mm:ss.SSS zzz"
//                                           ^^^ add this
val apiDateFormatter = SimpleDateFormat(DATE_FORMAT, Locale.ENGLISH)

关于java - 转换后如何修复丢失的日期时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47977580/

相关文章:

java - SQL 序列 : Hibernate and Liquibase

java - 与Android/java中的今天相比,两个日期之间的百分比

PHP日期计算

java - org.hibernate.QueryException : could not resolve property --problem

java - 简单的 for 循环在某些手机上无法正常工作。优化不好?

java - java递归数独求解器中的堆栈溢出错误

Android - 在 WebView 中选择文件按钮

android - 使用适用于 Android 和 ADT 的 Google Cloud Endpoints

java - 使用 onclicklistener 跳过按钮点击

php - 如何在 php 中获取上周的日期范围?