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

Android如何解析API返回的/Date(1543469400000)/格式日期时间数据

/Date(毫秒数)/ 格式日期解析方案

这类/Date(xxxxxxxxxxxxx)/格式是ASP.NET AJAX框架默认的JSON日期序列化规则,括号内的核心内容是UTC 1970-01-01 00:00:00起算的毫秒级时间戳,部分返回值会在毫秒数后追加时区偏移值,例如/Date(1543469400000+0800)/。

手动解析步骤

  • 提取核心时间字段:裁掉固定前缀/Date(和后缀)/,拿到括号内的完整字符串
  • 过滤非时间戳字符:从括号内的字符串中提取开头的纯数字(可能带负号)部分,丢弃后面的时区偏移后缀,转成Long类型的毫秒值
  • 构造日期对象:用拿到的毫秒值直接生成Date实例,再按需格式化输出为目标时间字符串

参考实现代码(Kotlin):

// 原始接口返回的时间字段值
val rawArrivalTime = "/Date(1543469400000)/"

// 提取毫秒值
val contentInBracket = rawArrivalTime.substringAfter("(").substringBefore(")")
val timeMillis = contentInBracket.takeWhile { it.isDigit() || it == '-' }.toLong()

// 转成Date对象
val arrivalDate = Date(timeMillis)

// 格式化为指定样式的时间字符串
val outputFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault())
val formattedArrivalTime = outputFormat.format(arrivalDate)

全局自动解析配置

如果项目用Gson做JSON解析,可以注册自定义日期反序列化器,所有该格式的Date字段会自动完成转换,无需每次手动处理:

class AspNetDateDeserializer : JsonDeserializer<Date> {
    override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): Date {
        val rawStr = json.asString
        val bracketContent = rawStr.substringAfter("(").substringBefore(")")
        val millis = bracketContent.takeWhile { it.isDigit() || it == '-' }.toLong()
        return Date(millis)
    }
}

// 初始化Gson时注册适配器
val gson = GsonBuilder()
    .registerTypeAdapter(Date::class.java, AspNetDateDeserializer())
    .create()

注意事项

  • 不要用固定长度截取字符串提取时间戳,避免带时区偏移的返回值解析出错
  • 格式化时间时注意按需配置时区,默认使用设备当前时区,如果接口要求UTC时间可以手动指定TimeZone.getTimeZone("UTC")
  • Android 8.0及以上版本建议用java.time包下的Instant、LocalDateTime替代老旧的Date和SimpleDateFormat,规避线程安全问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 02:51:30