从 DateFormatter 检索使用“AM/PM”格式指示时间的“本地化”字符串时遇到问题

Posted

技术标签:

【中文标题】从 DateFormatter 检索使用“AM/PM”格式指示时间的“本地化”字符串时遇到问题【英文标题】:Trouble retrieving 'localised' strings from DateFormatter that indicate time using "AM/PM" format 【发布时间】:2020-08-14 07:47:00 【问题描述】:

我的应用程序有一个部分,我在 24 小时字符串图表中指示当前时间,这些字符串遵循 AM/PM 格式,即:从上午 12 点到晚上 11 点的一组字符串

我正在尝试本地化上述字符串集,但我很困惑。

我正在使用DateFormatter 和“ha”的dateFormat。我试过设置格式化程序的locale 属性,它确实改变了几种语言的字符串,但它不能通用。

let df = DateFormatter()
df.locale = .current
df.dateFormat = "h a"
myLabel.text = df.string(from: myDate)

我听说很多国家甚至不遵循 AM/PM 格式。那么我该怎么做呢?我应该根据语言环境更改dateFormat 吗?使用 AM/PM 格式真的不是一个好主意吗?

我认为DateFormatter 会相应地为我处理这个问题,但事实并非如此。需要帮助!蒂亚!

【问题讨论】:

en.wikipedia.org/wiki/… 请记住,您并不孤单,而且似乎主要使用 24 小时制。您应该始终更喜欢本地偏好。也许“jj”可能是您正在寻找的格式。 【参考方案1】:

如果要根据用户的Locale显示时间,可以在DateFormatter上使用timeStyle

let df = DateFormatter()
df.locale = Locale(identifier: "en_US")
df.setLocalizedDateFormatFromTemplate("j")
// 2 PM

let df = DateFormatter()
df.locale = Locale(identifier: "fr_FR")
df.setLocalizedDateFormatFromTemplate("j")
// 14

【讨论】:

感谢拉斐尔!问题是我将语言环境设置为Locale.current,并且语言“法语”(在本例中使用)有很多版本。我只是使用简单的“法语”语言,它以 AM/PM 格式返回时间。令人困惑的部分是我不确定“AM/PM”是否在每种语言中都拼写相同。如果是,我可以通过一些调整来使用您的解决方案。如果没有,我需要考虑其他事情。 我更新了我的答案以考虑用户偏好(设置中的 24 小时切换)并且只显示小时(而不是小时:分钟)。关于您的担忧,您应该让 DateFormatter 完成它的工作。它将根据用户的喜好显示正确的格式。

以上是关于从 DateFormatter 检索使用“AM/PM”格式指示时间的“本地化”字符串时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

Swift DateFormatter 提取时间

从 NSDictionary 检索键/值对会导致数据不正确并崩溃

在swift中使用DateFormatter时发生错误[重复]

DateFormatter 中的 Swift 语言错误? [复制]

Dateformatter 返回零日期

字符串到日期的转换有时会使用 DateFormatter 返回 nil