ios - iPhone 在日期格式化程序上随机崩溃

标签 ios swift

<分区>

在我们的 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 没有被格式化,因为它是 nil。

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 .如果重复,我深表歉意。

最佳答案

这是语言环境的问题。 DateFormatter 取决于设备的当前位置设置,包括日期和时间。

您可以通过将其语言环境设置为 en_US_POSIX 来确保格式化程序的语言环境始终是静态的:

formatter.locale = Locale(identifier: "en_US_POSIX")

有关详细信息,请参阅 Apple 的链接:

https://developer.apple.com/documentation/foundation/nsdateformatter

关于ios - iPhone 在日期格式化程序上随机崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44828092/

相关文章:

ios - 将语言从(英语)更改为阿拉伯语时,如何从左到右更改 SWReaveal 侧边菜单形式

ios - 将 PDF 文件附加到电子邮件 - Swift

android - 如何让 Row 在 Flutter 中充分发挥其子项的高度?

ios - UISearchDisplayController 中结果显示延迟 5 秒

iphone - 以正确的方式检测 UITextField 中的退格键

ios - 核心数据通过带有自定义字段的表进行多对多

iOS 编程 : Making an arc4_random not repeat itself using a do while loop

ios - MPMediaPickerController 在 iPad 上缺少搜索功能

ios - 插入导航堆栈时隐藏 TabBar,弹出导航堆栈时将其恢复

ios - 在第二个动画之前查看跳跃