与系统时钟一样的时间显示

Time display as in system clock

我想将时间显示为 iOS 系统时钟(时间以大写字母表示,一天中的一部分小而大写)。

我知道我需要属性字符串的帮助,但我不知道如何让它兼容不同的时间显示格式(12 和 24 小时)、不同的语言和本地。

要根据用户区域设置以字符串表示形式获取时间,您可以使用:

let formatter = DateFormatter()
formatter.timeStyle = DateFormatter.Style.short //Or in short formatter.timeStyle = .short
let time = formatter.string(from: Date())

例如 returns 你 23:47 代表俄罗斯,11:47 PM 代表美国。

然后我们可以检查返回的时间格式是否包含用户区域设置的日期部分。如果是这样,我们为字符串中的最后两个字符设置另一种字体,这是我们的日期部分。

if let range = time.range(of: formatter.amSymbol) ?? time.range(of: formatter.pmSymbol) {
    let fontSize: CGFloat = 8.0
    let nsRange = NSRange(range, in: time)

    let attrString = NSMutableAttributedString(string: time)
    attrString.addAttributes([.font: UIFont.systemFont(ofSize: fontSize)], range: nsRange)

    label.attributedText = attrString
} else {
    label.text = time
}