我想测试我的 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)
}
currentDate
和 convertedDate
之间的差异约为 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/