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

在Kotlin中如何将FirebaseRTDB的iOS Double时间戳转为Long?

Firebase RTDB跨平台时间戳兼容方案

问题背景

  • iOS端通过Swift向Firebase RTDB写入秒级时间戳,类型为Double(示例值:1633598017.489507)
  • Android端通过Kotlin写入毫秒级时间戳,类型为Long(示例值:1689308567775)
  • 双方共享同一数据库,且已有大量iOS端写入的Double类型时间戳,需在Android端兼容转换为Long类型以生成Date对象

转换逻辑

iOS的Double时间戳是自1970年以来的秒数,而Android的Date构造器需要的是自1970年以来的毫秒数,因此转换逻辑为:

  1. 将iOS的Double时间戳乘以1000,把秒单位转换为毫秒单位
  2. 将结果转换为Long类型(直接强转即可,不会有精度丢失,因为当前秒级时间戳乘以1000后远小于Double的精确整数范围)

完整代码实现

val timeStamp = map["timeStamp"] as? Long // 来自Android端的毫秒级时间戳
if (timeStamp != null) {
    val date = Date(timeStamp)
} else {
    val iOSTimeStamp = map["timeStamp"] as? Double // 来自iOS端的秒级时间戳
    iOSTimeStamp?.let {
        val convertedTimeStamp = (it * 1000).toLong()
        val date = Date(convertedTimeStamp)
        // 后续使用date对象的逻辑
    }
}

补充说明

  • 精度保障:当前秒级时间戳约为1.6×10^9,乘以1000后为1.6×10^12,而Double可以精确表示到2^53(约9×10^15),因此转换过程中不会出现整数精度丢失问题
  • 长期优化建议:如果条件允许,可逐步将数据库中的时间戳统一为毫秒级Long类型,消除跨平台兼容成本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 14:52:29