在我们的iphone应用程序中,我们解析了从api调用获得的日期。日期正确返回并且是有效日期。现在只有在某些设备上,它会在解开Optional值时因意外发现的nil错误而崩溃。以下是有问题的代码:
//formatDate(date: date, format: FullDateFormat)
class func formatDate(date: String, format: String)->String{
if date.characters.count == 0 {return "" }
let formatter = DateFormatter()
formatter.dateFormat = Constants.FullDateFormat
let nsDate = formatter.date(from: date)
formatter.dateFormat = format
return formatter.string(from: nsDate!)
}
nsDate未被格式化,因为它是零。
Constants.FullDateFormat是一个静态字符串,定义为" M / d / yyyy h:mm:ss a"因为日期总是以这种格式出现
对类函数的调用将如下所示
let newDate = Helpers.formatDate(date: "9/27/2017 9:26:51 AM", format: "h:mm a")
有些设备会崩溃而大多数设备都不会崩溃。如果我们不使用类功能,应用程序可以正常工作。我没有看到任何原因,所以如果有人知道为什么会这样,可能会有解决方案,请告诉我。
这可能是重复的,但在我执行的任何搜索中都没有显示。感谢社区,他们在stackoverflow已经找到了另一个类似的问题和答案。如果这是重复,我道歉。
答案 0 :(得分:5)
这是一个地方问题。 DateFormatter
取决于设备的当前位置设置,包括日期和时间。
您可以通过将其语言环境设置为en_US_POSIX
来确保格式化程序的语言环境始终是静态的:
formatter.locale = Locale(identifier: "en_US_POSIX")
有关详细信息,请参阅Apple的链接:
https://developer.apple.com/documentation/foundation/nsdateformatter