【问题标题】:iOS Date Formatting without year, with correct localization没有年份的 iOS 日期格式,具有正确的本地化
【发布时间】:2020-10-18 22:46:45
【问题描述】:

你知道我如何在 iOS 上拥有以下日期字符串 Jun 28 吗?

  • Jun 28英文版
  • 28 juin 法语
  • 等

我基本上想要short month, day, without year。 (按本地化顺序,例如法语中的day, month)

我尝试了以下方法:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMM dd"
let dateStr = dateFormatter.string(from: Date())
print(dateStr) // --> Jun 28

它适用于英语,但不适用于其他语言。

例如,如果您设置
dateFormatter.locale = Locale(identifier: "fr”)
它应该输出28 juin,但它返回juin 28。

我也试过用:

let date = Date()
let customFormat = "MMM dd"
let frLocale = Locale(identifier: "fr_FR")
let frFormat = DateFormatter.dateFormat(fromTemplate: customFormat, options: 0, locale: frLocale)
let formatter = DateFormatter()
formatter.dateFormat = frFormat
let dateStr = formatter.string(from: date)
print(dateStr) // -> 28 Jun

^__ 顺序正确但月份是英文的。

最接近的是:

let dateFormatter = DateFormatter()
dateFormatter.timeStyle = .none
dateFormatter.dateStyle = .medium
let dateStr = dateFormatter.string(from: Date())
print(dateStr) // --> Jun 28, 2020

^__ 但我不想要年份。

【问题讨论】:

    标签: ios swift date nsdateformatter dateformatter


    【解决方案1】:

    我相信这部分文档是关键(我的意思是,如果我只是在格式化程序上重新设置语言环境而不再次设置模板,我会得到你在第一种情况下描述的内容):

    func setLocalizedDateFormatFromTemplate(String)

    重要提示:只有在设置了语言环境后才能调​​用此方法 接收者。

    果然,当你这样做时,你会得到正确的格式:

    let dateFormatter = DateFormatter()
    dateFormatter.locale = Locale(identifier: "en_US")
    dateFormatter.setLocalizedDateFormatFromTemplate("MMM dd")
    print(dateFormatter.string(from: Date())) // --> Jun 28
    
    dateFormatter.locale = Locale(identifier: "fr_FR")
    dateFormatter.setLocalizedDateFormatFromTemplate("MMM dd")
    print(dateFormatter.string(from: Date())) // --> 28 juin
    

    顺便还有a really good session about formatters in WWDC'20

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多