我遇到了一些特殊情况,我不确定它为什么会发生或者如何处理它。
let formatter = DateFormatter()
formatter.dateFormat = "h:mma"
let timeString = "8:00am"
let date = formatter.date(from: timeString)!
如果用户将时间设置为使用12小时制,则此代码有效。如果他们的设备设置为24小时制,它就会崩溃。
如何使其独立于用户的设置工作?
答案 0 :(得分:4)
您必须将语言环境更改为标准POSIX语言环境:
formatter.locale = Locale(identifier: "en_US_POSIX")
在iOS上,用户可以覆盖默认的AM / PM与24小时时间设置(通过设置>一般>日期&时间> 24小时时间),这会导致NSDateFormatter重写格式字符串你set,这会导致你的解析时间失败。
请注意,如果您不解析/编码数据,则强制执行特定的时间格式不良做法。如果要向用户显示格式化时间,更好的解决方案是使用用户定义的格式:
let formatter = DateFormatter()
formatter.dateStyle = .none
formatter.timeStyle = .short
答案 1 :(得分:0)
试试这段代码,你需要为你的日期设置时区,
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)