在另一种语言中使用日期格式化程序

6

我正在运行一段代码,在不同语言设置的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?


感谢您对 Foundation.Date() 的额外提示。 - Shane O'Seasnain
1个回答

16
无论何时,当您需要解析始终以固定语言到达的固定格式日期/时间字符串时,您需要设置日期格式化程序的区域设置,以使其与您解析的数据匹配。
在这种情况下,最好使用特殊的en_US_POSIX区域设置。这确保了英文月份名称得到正确处理,而不受用户区域设置的影响,并且可以正确处理设备上的12/24小时制设置。
dateFormatter.locale = Locale(identifier: "en_US_POSIX")

谢谢。我已经使用这个额外的设置进行了测试,现在回到了“正常”状态。感谢您的快速回复。 - Shane O'Seasnain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接