You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Calendar添加一天后返回错误时间戳问题求助

问题分析与解决方案

看起来你遇到的问题核心是混淆了时间戳的单位——Calendar类的timeInMillis字段要求的是毫秒级时间戳,但你在使用过程中把秒级时间戳当成了毫秒来处理,导致添加一天后的结果完全偏离预期。

为什么会出现这个错误?

你日志里的Time1: 1526478465是秒级时间戳(对应2018-05-16 19:17:45),但Calendar的timeInMillis需要的是毫秒级(应该是1526478465000)。当你调用cal2.add(Calendar.DATE, 1)时,Calendar会自动添加一天对应的毫秒数:86400 * 1000 = 86400000。

原本如果是正确的毫秒级时间戳,添加后应该是1526478465000 + 86400000 = 1526564865000(对应2018-05-17 19:17:45),但因为你用了秒级时间戳赋值,计算后得到1526478465 + 86400000 = 1612878465——这个数字如果被当成秒级时间戳解析,就会对应2021年的日期,这就是你看到错误结果的原因。

修复步骤

  1. 统一时间戳单位
    如果你的原始时间戳是秒级的,必须先转换为毫秒再赋值给timeInMillis:

    val cal = Calendar.getInstance()
    // 假设你从接口/其他地方拿到的是秒级时间戳
    val secondsTimestamp = 1526478465L
    cal.timeInMillis = secondsTimestamp * 1000 // 转换为毫秒级
    
  2. 优化日志打印,避免单位混淆
    直接打印格式化后的日期,而不是纯数字时间戳,这样能直观验证结果:

    import java.text.SimpleDateFormat
    import java.util.Locale
    
    // ...
    
    val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss E", Locale.getDefault())
    val cal2 = Calendar.getInstance()
    cal2.timeInMillis = cal.timeInMillis
    
    Log.e("Time1", "${sdf.format(cal.time)} (${cal.timeInMillis})")
    cal2.add(Calendar.DATE, 1)
    Log.e("Time2", "${sdf.format(cal2.time)} (${cal2.timeInMillis})")
    
  3. 确认添加逻辑的正确性
    你使用cal2.add(Calendar.DATE, 1)来添加一天的逻辑本身是完全正确的,只要时间戳单位正确,就能得到预期的结果。

额外建议

如果你的项目是基于Android或Java 8+,更推荐使用java.time包下的API(比如LocalDateTime、Instant),它们的API设计更清晰,能避免这类单位混淆的问题:

import java.time.Instant
import java.time.LocalDateTime
import java.time.ZoneId
import java.time.format.DateTimeFormatter

// 秒级时间戳转LocalDateTime
val instant = Instant.ofEpochSecond(1526478465L)
val dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault())
// 添加一天
val nextDay = dateTime.plusDays(1)
// 格式化输出
val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss E")
Log.e("Time1", dateTime.format(formatter))
Log.e("Time2", nextDay.format(formatter))

内容的提问来源于stack exchange,提问作者varmashrivastava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:09:13