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

英国区域设置下JSON日期字符串使用DateFormatter解析失败问题

解析失败根本原因

DateFormatter默认会继承设备当前的区域配置,当设备设置为英国区域+12小时制时,系统会自动修改你声明的dateFormat规则:将24小时制的HH替换为12小时制的h,同时新增AM/PM标记的匹配逻辑,和你拿到的固定24小时制JSON时间字符串格式不匹配,最终解析失败。

修复方案

给DateFormatter显式指定en_US_POSIX类型的Locale即可,该Locale是苹果专门设计用于处理机器生成的固定格式时间字符串的,完全不受用户系统区域、时间制式设置的影响。

  • Swift配置示例:
let dateFormatter = DateFormatter()
// 必须在设置dateFormat之前配置locale
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS"
// 如果JSON时间为UTC时间,可额外配置时区避免偏移
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
  • Objective-C配置示例:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSS";
// 按需配置时区
dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
注意事项
  • 仅在处理后端返回、JSON携带这类固定格式的机器生成时间时使用en_US_POSIX,如果是需要将日期转为给本地用户查看的展示字符串,不要设置该Locale,否则会不符合用户的系统显示习惯。
  • 注意配置顺序:先设置locale再设置dateFormat,避免部分旧系统版本下规则不生效的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:48:01