ios - DateFormatter 根据用户时间设置表现不同

标签 ios swift nsdateformatter foundation

我遇到了一些特殊情况,我不确定它为什么会发生或如何处理它。

let formatter = DateFormatter()
formatter.dateFormat = "h:mma"
let timeString = "8:00am"
let date = formatter.date(from: timeString)!

如果用户将时间设置为使用 12 小时制,则此代码有效。如果他们将设备设置为 24 小时制,它就会崩溃。

如何让它独立于用户的设置工作?

最佳答案

您必须将语言环境更改为标准 POSIX 语言环境:

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

参见 technical note QA1480 :

On iOS, the user can override the default AM/PM versus 24-hour time setting (via Settings > General > Date & Time > 24-Hour Time), which causes NSDateFormatter to rewrite the format string you set, which can cause your time parsing to fail.

请注意,如果您不对数据进行解析/编码,则强制使用特定时间格式是不好的做法。如果您想向用户显示格式化时间,更好的解决方案是使用用户定义的格式:

let formatter = DateFormatter()
formatter.dateStyle = .none
formatter.timeStyle = .short

关于ios - DateFormatter 根据用户时间设置表现不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43451913/

相关文章:

swift - 错误 : missing argument for parameter #1 in call (swift)

ios - Swift Core Data - 如何更新所有子实体的属性?

ios - 清除 iPhone 和 iPad 上的 View Controller

ios - 在 XCTest 的 UI 测试中从 TextView 获取文本

ios - 将 TextField 输入限制为大写字母、数字和 6 个字符限制?

ios - iOS 中的日期格式/错误处理问题

ios - 更改事件时区是否会影响共享事件中的其他人?

objective-c - 如何确定当前日期是否在不包含年份的两个日期范围之内/之外?

ios - Swift 中的自定义导航栏

iphone - UITableView 委托(delegate)方法