在另一种语言中使用dateFormatter

时间:2017-10-22 18:14:26

标签: swift date regional-settings

我在运行不同语言设置的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吗?

1 个答案:

答案 0 :(得分:3)

当您需要解析始终以固定语言到达的固定格式日期/时间字符串时,您需要设置日期格式化程序的语言环境,使其与您要解析的数据匹配。

在这种情况下,最好使用en_US_POSIX的特殊区域设置。这样可以确保处理英文月份名称,无论用户的区域设置如何,以及在设备上正确处理12/24时间设置。

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