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

C# DateTime字符串用DateFormatter转Swift Date返回nil如何解决?

问题原因

转换失败的核心是dateFormat和输入的日期字符串结构不匹配,存在两处不对应:

  • 输入字符串末尾包含三位毫秒值.647,但你使用的格式串中没有对应的毫秒匹配规则
  • 输入字符串没有携带时区后缀,但你在格式串末尾加了代表时区匹配的Z,格式匹配失败自然返回nil

正确实现代码

除了修正格式串外,建议额外固定DateFormatter的locale为en_US_POSIX,避免设备系统设置为12小时制、非英文locale时出现意外转换失败:

let dateAndTimeString = "2021-08-24T10:16:06.647"

let dateFormatter = DateFormatter()
// 固定locale避免系统设置影响转换
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
// SSS对应三位毫秒,去掉不需要的时区匹配Z
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS"

let date = dateFormatter.date(from: dateAndTimeString)

补充说明

如果后续C#接口返回的日期字符串补充了时区后缀,需要对应调整dateFormat:

  • 后缀为Z(代表UTC时区)的场景:格式串改为"yyyy-MM-dd'T'HH:mm:ss.SSSZ"
  • 后缀为+08:00这类带冒号时区偏移的场景:格式串改为"yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:57:04