從String建立Date在真機執行崩潰

weixin_33936401發表於2017-05-25

首先,真機與模擬器的最大的區別在於

  1. iOS 真機是大小寫敏感的。
  2. 真機和模擬器的Local設定可能會不同。模擬器的預設local是 "en_US",而真機就視地區而定了。

所以用一下的程式碼在真機上執行就可能會出錯了

func createDate(fromString string: String) -> Date {
        let formatter = DateFormatter()
        formatter.dateFormat = "EEE MMM dd HH:mm:ss ZZZ yyyy"
        let date = formatter.date(from: string) 
        return date! //fatal error: unexpectedly found nil while unwrapping an Optional value
}

所以改成

func regularDate(fromString str: String) -> Date {
        let formatter = DateFormatter()
        formatter.dateFormat = "EEE MMM dd HH:mm:ss ZZZ yyyy"
        formatter.locale = Locale(identifier: "en_US")
        formatter.timeZone = TimeZone(identifier: "UTC") // 最好這也加上去
        let date = formatter.date(from: str)
        return date!

}

相關文章