首页 > 解决方案 > 字符串扩展 toDate() 使某些设备崩溃

问题描述

我的问题是尝试将字符串转换为日期并崩溃。我的应用程序在 App Store 上,并在我的设备上运行,但它在某些设备上崩溃。我查看崩溃日志并看到它,当字符串到日期时崩溃。我没有不明白为什么我的设备工作正常或某些设备工作正常但其他设备崩溃。

func toDate() -> Date {

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss+03:00" //Your date format
    dateFormatter.timeZone = TimeZone(abbreviation: "GMT+3:00") //Current time zone
    //according to date format your date string
    guard let date = dateFormatter.date(from: self) else {
        fatalError()
    }
    return date
}

标签: iosswiftdatensdateformatter

解决方案


两种解决方案:

  1. en_US_POSIX为固定格式添加语言环境。
  2. 使用ISO8601DateFormatter(iOS 8+),好处是没有语言环境,没有日期格式,没有时区。

    func toDate() -> Date? {
        let dateFormatter = ISO8601DateFormatter()
        return dateFormatter.date(from: self) 
    }
    

无论如何返回一个可选的,fatalError()在生产环境中会导致非常糟糕的用户体验。


推荐阅读