DateFormatter 根据用户时间设置表现不同
DateFormatter behaves different based on user time settings
我遇到了一些特殊情况,我不确定为什么会这样或如何处理。
let formatter = DateFormatter()
formatter.dateFormat = "h:mma"
let timeString = "8:00am"
let date = formatter.date(from: timeString)!
如果用户将时间设置为使用 12 小时制,则此代码有效。如果他们将设备设置为 24 小时制,它就会崩溃。
如何让它独立于用户的设置工作?
试试这个代码,你需要为你的日期设置时区,
let formatter = DateFormatter()
formatter.dateFormat = "h:mma"
formatter.timeZone = TimeZone.init(identifier: "UTC")
let timeString = "8:00am"
let date = formatter.date(from: timeString)!
print(date)
您必须将语言环境更改为标准 POSIX 语言环境:
formatter.locale = Locale(identifier: "en_US_POSIX")
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.
请注意,如果您不是 parsing/encoding 数据,则强制执行特定时间格式是 不好的做法。如果您想向用户显示格式化时间,更好的解决方案是使用用户定义的格式:
let formatter = DateFormatter()
formatter.dateStyle = .none
formatter.timeStyle = .short
我遇到了一些特殊情况,我不确定为什么会这样或如何处理。
let formatter = DateFormatter()
formatter.dateFormat = "h:mma"
let timeString = "8:00am"
let date = formatter.date(from: timeString)!
如果用户将时间设置为使用 12 小时制,则此代码有效。如果他们将设备设置为 24 小时制,它就会崩溃。
如何让它独立于用户的设置工作?
试试这个代码,你需要为你的日期设置时区,
let formatter = DateFormatter()
formatter.dateFormat = "h:mma"
formatter.timeZone = TimeZone.init(identifier: "UTC")
let timeString = "8:00am"
let date = formatter.date(from: timeString)!
print(date)
您必须将语言环境更改为标准 POSIX 语言环境:
formatter.locale = Locale(identifier: "en_US_POSIX")
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.
请注意,如果您不是 parsing/encoding 数据,则强制执行特定时间格式是 不好的做法。如果您想向用户显示格式化时间,更好的解决方案是使用用户定义的格式:
let formatter = DateFormatter()
formatter.dateStyle = .none
formatter.timeStyle = .short