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

Swift中如何在JSON请求body内添加Date类型数据

Swift POST请求添加Date类型参数的方案

方案1:Date转字符串后存入原有[String: String]字典

适合参数少、不想改现有结构的场景,提前和服务端对齐日期格式即可,最常用的是ISO8601标准格式或时间戳:

// 全局复用ISO8601格式化器,避免重复创建损耗性能
let isoDateFormatter = ISO8601DateFormatter()
// 可根据服务端要求调整格式选项,比如要不要带毫秒、时区等
isoDateFormatter.formatOptions = [.withInternetDateTime]

// 转成字符串后加入原有字典
let currentDateStr = isoDateFormatter.string(from: Date())
let body: [String: String] = [
    "device": device, 
    "version": version, 
    "model": model, 
    "problem": userInput,
    "createTime": currentDateStr // 新增Date转成的字符串字段
]

如果服务端要求传数字类型的时间戳,写法如下:

// 秒级时间戳,需要毫秒的话乘1000即可
let timestamp = Int(Date().timeIntervalSince1970)
// 注意字典类型要改成[String: Any]兼容数字类型
let body: [String: Any] = [
    "device": device, 
    "version": version, 
    "model": model, 
    "problem": userInput,
    "createTime": timestamp
]

方案2:使用Codable模型构造请求体(更推荐)

参数多、类型复杂的场景优先用这个方案,不用手动处理类型转换,编译器会帮你做类型校验:

  1. 先定义请求体模型,直接声明Date类型属性
struct FeedbackRequest: Codable {
    let device: String
    let version: String
    let model: String
    let problem: String
    let createTime: Date // 直接写Date类型即可
}
  1. 初始化模型后用JSONEncoder编码成请求体
// 初始化模型
let requestBody = FeedbackRequest(
    device: device,
    version: version,
    model: model,
    problem: userInput,
    createTime: Date()
)

// 编码为JSON数据
let encoder = JSONEncoder()
// 配置日期编码策略,和服务端要求对齐
encoder.dateEncodingStrategy = .iso8601
// 要时间戳的话改成下面这行
// encoder.dateEncodingStrategy = .secondsSince1970

guard let httpBody = try? encoder.encode(requestBody) else {
    // 编码失败处理逻辑
    return
}

// 赋值给URLRequest即可发起请求
var request = URLRequest(url: 你的服务端接口地址)
request.httpMethod = "POST"
request.httpBody = httpBody
// 记得设置Content-Type为json
request.setValue("application/json", forHTTPHeaderField: "Content-Type")

注意事项

  • 日期格式、时间戳单位必须和服务端完全一致,否则会出现参数解析失败的问题
  • 日期格式化器、JSONEncoder建议全局复用,频繁创建会产生不必要的性能开销

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:24:03