我在运行不同语言设置的iPhone上运行一段返回nil
的代码。代码中的示例如下所示:
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMM d, yyyy, h:mm a"
let thisDate = "Mar 4, 2017, 7:50 PM"
let foundationDate = dateFormatter.string(from: Foundation.Date())
print("As String - thisDate: \(thisDate), foundationDate: \(foundationDate)")
print("As Date - thisDate: \(dateFormatter.date(from: thisDate)), foundationDate: \(dateFormatter.date(from: foundationDate))")
如果我跑这个,我得到:
As String - thisDate: Mar 4, 2017, 7:50 PM, foundationDate: okt. 22, 2017, 7:57 PM
As Date - thisDate: nil, foundationDate: Optional(2017-10-22 17:57:00 +0000)
任何人都可以展示如何覆盖客户端设置,以便thisDate
不会返回nil吗?
答案 0 :(得分:3)
当您需要解析始终以固定语言到达的固定格式日期/时间字符串时,您需要设置日期格式化程序的语言环境,使其与您要解析的数据匹配。
在这种情况下,最好使用en_US_POSIX
的特殊区域设置。这样可以确保处理英文月份名称,无论用户的区域设置如何,以及在设备上正确处理12/24时间设置。
dateFormatter.locale = Locale(identifier: "en_US_POSIX")