Swift DateFormatter语言 - 年和年的印刷周



我正在尝试使用DateFormatter以"[一年中的一周][年]"组合的格式打印给定日期。我给了它一个"w yyyy"的模式,但它返回一个空字符串。

let date = DateComponents(calendar: Calendar.current, year: 2018, month: 9, day: 28).date
let formatter = DateFormatter()
formatter.locale = Locale.current
formatter.setLocalizedDateFormatFromTemplate("w yyyy")
formatter.string(from: date!) // this returns ""
formatter.setLocalizedDateFormatFromTemplate("w")
formatter.string(from: date!) // this returns the correct number, like "36"

根据日期格式指南,iOS 5 使用版本 tr35-19。我认为从那时起它就没有改变过。

在 unicode.org 文档中,没有特别提及一年中的一周与年份格式的行为方式。我在这里错过了什么?

编辑我知道我可以使用DateComponents来获取数字并以这种方式格式化它们,但这个问题更多的是关于为什么格式"w yyyy"很特别。

不要使用setLocalizedDateFormatFromTemplate().我不熟悉该方法,但听起来它需要一个预定义的日期字符串模板,并且您的格式字符串不得与任何已知模板匹配。如果您更改线路

formatter.setLocalizedDateFormatFromTemplate("w yyyy")

formatter.dateFormat = "w yyyy"

它按预期工作。

编辑:

看来你应该使用:

formatter.dateFormat = "w Y"

yyyyy不会在某些日期给出正确的结果。

试试这个:

let date = Date()
let calendar = Calendar.current
let year = calendar.component(.year, from: date)
let month = calendar.component(.month, from: date)
let day = calendar.component(.day, from: date)
let weekOfYear = calendar.component(.weekOfYear, from: Date.init(timeIntervalSinceNow: 0))

let date = Date()
let calendar = Calendar.current
let year = calendar.component(.year, from: date)
let month = calendar.component(.month, from: date)
let day = calendar.component(.day, from: date)
let weekOfYear = calendar.component(.weekOfYear, from: Date())

最新更新