DateFormatter根据用户时间设置的行为不同

时间:2017-04-17 12:53:16

标签: ios swift nsdateformatter foundation

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

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

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

如何使其独立于用户的设置工作?

2 个答案:

答案 0 :(得分:4)

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

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

请参阅technical note QA1480

  

在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)