iOS 没有年份的日期格式,正确的本地化
iOS Date Formatting without year, with correct localization
你知道我如何在 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
但它 returns 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
^__ 但我不想要年份。
我相信文档的这一部分是关键(我的意思是如果我只是在格式化程序上重新设置语言环境而不重新设置模板,我会得到你在第一种情况下描述的内容):
func setLocalizedDateFormatFromTemplate(String)
Important: You should call this method only after setting the locale of
the receiver.
果然,当你这样做时,你会得到正确的格式:
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
你知道我如何在 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
但它 returns 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
^__ 但我不想要年份。
我相信文档的这一部分是关键(我的意思是如果我只是在格式化程序上重新设置语言环境而不重新设置模板,我会得到你在第一种情况下描述的内容):
func setLocalizedDateFormatFromTemplate(String)
Important: You should call this method only after setting the locale of the receiver.
果然,当你这样做时,你会得到正确的格式:
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