如何以“ 2小时前”的格式设置日期和时间?

时间:2020-09-23 07:01:43

标签: ios swift

我想将日期和时间的格式设置为“ 5小时之前”,就像“日历”应用程序一样。而且我还希望格式字符串可以针对多种语言进行本地化。

iOS 13中引入了一个名为RelativeDateTimeFormatter的新API。但是,该API只能生成本地化的字符串,例如“ 2小时前”和“ 2小时内”。这不适合我的目的。

我想知道是否有API提供我想要的功能。

2 个答案:

答案 0 :(得分:1)

如果您对Apple的操作方式感兴趣,可以在EventKitUI框架中进行本地化。

import EventKitUI

...

let bundle = EventKitUIBundle()!

// access the string that adds "before" information to an interval
let beforeKey = bundle.localizedString(forKey: "%@ before", value: nil, table: nil)
// access the string that localizes some interval (days, in this case)
let intervalKey = bundle.localizedString(forKey: "interval_days_long", value: nil, table: nil)

// use the strings with a value
print(String(format: beforeKey, String(format: intervalKey, 1))) // 1 day before
print(String(format: beforeKey, String(format: intervalKey, 3))) // 3 days before

本地化字典包含对数值1-9的适当复数。 您可以完全一样。我不建议使用Apple的本地化字符串,因为这些未记录。

答案 1 :(得分:0)

如果可以将 before 部分本地化,也许考虑使用DateComponentsFormatter

(也许这更适合作为注释,但似乎太长了)

例如:

let componentsList = [
    DateComponents(minute:5),
    DateComponents(minute:10),
    DateComponents(minute:15),
    DateComponents(minute:30),
    DateComponents(hour:1),
    DateComponents(hour:2),
    DateComponents(day:1),
    DateComponents(day:2),
    DateComponents(weekOfMonth:1)
]

for components in componentsList {
    if let text = DateComponentsFormatter.localizedString(from: components, unitsStyle: .full) {
        print("\(text) before")
    }
}