ios - iOS 和 watchOS 上的本地化希伯来语日期不正确
问题描述
我正在开发一个日期/时间应用程序,该应用程序执行 Apple 没有内置到其操作系统和捆绑应用程序中的事情。
我正在利用内置类,例如Date
和DateFormatter
对于某些部分,并且我在希伯来语本地化的希伯来日历上的日期得到了一些奇怪的结果。
如果我要求标准full
、、、和格式long
,一切都很好。但是当我提供一个模板供 DateFormatter 使用时,会发生一些奇怪的事情。medium
short
三日期并发症(包含公历、希伯来和穆斯林日历上的日期)的中间行是错误的。
应该是יום א׳, ז׳ בחשון תשפ״א
,因为约定是希伯来语中的希伯来日期使用希伯来数字。
产生希伯来日期的相关代码:
我们首先从设置专门的希伯来语和伊斯兰日历类的日期格式化程序的语言环境和时区开始。
if localeIdentifier == "" {
self.dateFormatter.locale = Locale.current
} else {
self.dateFormatter.locale = Locale(identifier: localeIdentifier)
}
self.dateFormatter.timeZone = timeZone
在处理生成正确时间的一些代码之后(实际上并未用于复杂化),我们DateFormatter
根据枚举值(“majorDateFormat”)设置 's dateStyle 或日期格式;如果我们应该使用模板(case .localizedLDML),我们使用特定的字符串(“dateGeekFormat”)作为模板。
在这种情况下,我指定了一个包含工作日、日、月和年的格式,其范围足够窄,可以在不丢失信息的情况下挤入 watchOS 复杂功能。然后我们为 Date fixedNow 生成日期字符串。
switch majorDateFormat {
case .localizedLDML:
let dateFormat = DateFormatter.dateFormat(fromTemplate:dateGeekFormat, options: 0, locale: self.dateFormatter.locale)!
self.dateFormatter.setLocalizedDateFormatFromTemplate(dateFormat)
case .none:
self.dateFormatter.dateStyle = .none
case .full:
self.dateFormatter.dateStyle = .full
case .long:
self.dateFormatter.dateStyle = .long
case .medium:
self.dateFormatter.dateStyle = .medium
case .short:
self.dateFormatter.dateStyle = .short
default:
self.dateFormatter.dateStyle = .full
} // switch majorDateFormat
let dateString = self.dateFormatter.string(from: fixedNow)
现在奇怪的是:
对于阿拉伯伊斯兰历法,阿拉伯数字是正确产生的。
此代码实际上用于正确地用于希伯来语中的希伯来日历。
我在旧系列 0 Apple Watch 上对此没有任何问题watchOS 5
,但我最近升级到运行 Apple Watch SEwatchOS 7
并发现了这个问题。
有没有其他人见过这样的问题?这是Apple的一个错误,还是我错过了什么?
提前感谢任何人都可以提供的任何帮助。
解决方案
以下是制作“יום א׳,ז׳ בחשון תשפ״א”的方法
let formatter = DateFormatter()
formatter.calendar = Calendar(identifier: .hebrew)
formatter.locale = Locale(identifier: "he")
formatter.dateStyle = .short // must come before date format below
formatter.setLocalizedDateFormatFromTemplate("c dd MMMM yyyy")
print(formatter.string(from: Date())) // יום א׳, ז׳ בחשון תשפ״א
推荐阅读
- windows - 使用笔记本电脑时随机弹出一个蓝色窗口,上面写着windows power shell,我应该怀疑有人入侵了我的笔记本电脑吗?
- sql - 合并两个具有相同日期字段的 SELECT 查询
- spring-boot - Spring boot,如何对 Embebed 定制器类进行单元测试
- .net - 从 .Net Web Api 升级到 .Net Core:localhost 当前无法处理此请求
- linux - cronjob 失败:“未知”:未知终端类型
- python - 如何在docker中显示图片
- python - ValueError:计算负 IRR 时的数学域错误
- javascript - q-img 调用计算函数不显示图像 Quasar
- c# - 为什么 C# 不对不可为空的长字段发出警告?
- python - 如何获得熊猫条形图的颜色