在 Swift 中使用 dateStyle 时如何让一天排在第一位

How do I make a day come first while using the dateStyle in Swift

在使用 DateFormatter()dateStyle 功能时,我想让日期先而不是月份。我尝试了所有可能的方法,但似乎没有任何效果。 这是我的代码。

        let dateFormatter = DateFormatter()           
        dateFormatter.dateFormat = "dd MMM yyyy"
        print(dateFormatter.string(from: beginDate))  //05 Jul 2020          
        dateFormatter.doesRelativeDateFormatting = true           
        dateFormatter.dateStyle = .medium            
        print(dateFormatter.string(from: beginDate)) //Jul 5, 2020

我希望最后一行打印“2020 年 7 月 5 日”。 dateStyle 很重要,因为没有它 dateFormatter.doesRelativeDateFormatting 将无法工作。应该有一个简单的方法来做到这一点。请帮助。

您实际上不需要更改代码中的任何内容。只需将模拟器的区域(设置 -> 常规 -> 语言和区域)切换到使用小端(日、月、年)样式 (here's a list) 的地方。一个典型的例子就是英国。

如果您希望总是首先显示日期,而不管用户所在的地区,您可以将日期格式化程序的 locale 设置为列出的国家/地区之一以上:

dateFormatter.locale = Locale(identifier: "en-GB")

但我不推荐这个。你不应该不尊重用户的语言和地区以及他们喜欢的日期格式,除非你有充分的理由。

最后一个命令中打印的字符串符合用户的区域设置。

要执行您想要的操作,您可以使用

强制执行
dateFormatter.locale = Locale(identifier: <identifier>)

要查看所有格式的列表,您可以这样做

Locale.availableIdentifiers.sorted().forEach { identifier in
    dateFormatter.locale = Locale(identifier: identifier)
    dateFormatter.doesRelativeDateFormatting = true
    dateFormatter.dateStyle = .medium

    print("identifier: \(identifier) - \(dateFormatter.string(from: beginDate))")
}