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
相关产品推荐
相关产品推荐

