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

iOS 15.4中Sept缩写导致日期转换崩溃问题求助

解决方案:iOS 15.4 9月日期解析崩溃问题

核心问题原因

iOS 15.4 对 en_GB 区域设置下的9月缩写做了调整,从原有的3字符缩写 Sep 改为4字符的 Sept。你的解析代码使用固定格式 dd MMM yyyy(期望3字符月份缩写),无法匹配 Sept,导致 date(from:) 返回 nil,后续强制解包触发崩溃。


方案一:避免字符串中转(推荐)

最可靠的方式是直接保存 DatePicker 选中的 Date 对象,跳过「Date→字符串→Date」的转换流程,彻底规避系统版本对字符串格式的影响:

// 定义变量存储选中的日期
var selectedDate: Date?

@objc func doneDateClicked() {
    guard let pickerDate = datePicker?.date else { return }
    
    selectedDate = pickerDate
    
    // 仅负责生成显示用的字符串,不依赖该字符串反向解析
    let dateFormatter = DateFormatter()
    dateFormatter.dateStyle = .medium
    dateFormatter.timeStyle = .none
    dateFormatter.timeZone = TimeZone(identifier: "GMT")
    dateFormatter.locale = Locale(identifier: "en_GB")
    dateFormatter.dateFormat = "dd MMM yyyy"
    
    dateTextField.text = dateFormatter.string(from: pickerDate)
    self.view.endEditing(true)
}

// 后续需要使用日期时直接调用selectedDate
if let targetDate = selectedDate {
    // 处理日期逻辑
}

方案二:兼容两种月份缩写的解析

如果必须从文本框的字符串解析日期,可通过多格式尝试的方式兼容 Sep 和 Sept:

func parseDate(from dateString: String) -> Date? {
    let formatter = DateFormatter()
    formatter.locale = Locale(identifier: "en_GB")
    formatter.calendar = Calendar(identifier: .gregorian)
    formatter.timeZone = TimeZone(identifier: "GMT")
    
    // 尝试两种可能的月份格式
    let possibleFormats = [
        "dd MMM yyyy hh:mm:ss",    // 匹配Sep格式
        "dd Sept yyyy hh:mm:ss"    // 匹配Sept格式
    ]
    
    for format in possibleFormats {
        formatter.dateFormat = format
        if let parsedDate = formatter.date(from: "\(dateString) 00:00:00") {
            return parsedDate
        }
    }
    return nil
}

// 使用示例
if let text = dateTextField.text, let datenN = parseDate(from: text) {
    // 处理解析后的日期
} else {
    // 解析失败的容错处理(避免崩溃)
}

额外优化建议

  1. 移除代码中冗余的配置:比如重复设置 timeZone(secondsFromGMT:0 和 GMT 是等价的,保留一行即可);
  2. 永远不要强制解包可选值(如 datePicker?.date!),改用可选绑定(guard let/if let)避免意外崩溃;
  3. 清理未使用的变量:当前代码中 timeFormatter 未被调用,可删除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:50:24