在我们的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!)
}
Run Code Online (Sandbox Code Playgroud)
nsDate没有格式化,因为它为nil。
Constants.FullDateFormat是一个静态字符串,定义为“ M / d / yyyy h:mm:ss a”,因为日期始终以这种格式出现
调用class函数将如下所示
let newDate = Helpers.formatDate(date: "9/27/2017 9:26:51 AM", format: "h:mm a")
Run Code Online (Sandbox Code Playgroud)
有些设备会崩溃,而大多数设备不会崩溃。如果我们不使用class函数,则该应用程序将正常运行。我没有发现任何原因,因此,如果有人知道为什么会发生这种情况以及可能的解决方案,请告诉我。
这可能是重复的,但未在我执行的任何搜索中显示。多亏了社区,他们指出了另一个类似的问题,已经在stackoverflow上给出了答案。如果这是重复的话,我深表歉意。
这是一个地区问题。DateFormatter取决于设备的当前位置设置,包括日期和时间。
您可以通过将格式化程序的语言环境设置为来确保格式化程序的语言环境始终是静态的en_US_POSIX:
formatter.locale = Locale(identifier: "en_US_POSIX")
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参见Apple的链接:
https://developer.apple.com/documentation/foundation/nsdateformatter
| 归档时间: |
|
| 查看次数: |
1102 次 |
| 最近记录: |