我正在尝试使用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"
y
和yyyy
不会在某些日期给出正确的结果。
试试这个:
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())