Ios Swift DateFormatter-打印年度和年度的周

Ios Swift DateFormatter-打印年度和年度的周,ios,swift,Ios,Swift,我正在尝试使用日期格式化程序以“[一年中的一周][一年]”组合的格式打印给定的日期。我给了它一个“wyyy”模式,但它返回一个空字符串 let date = DateComponents(calendar: Calendar.current, year: 2018, month: 9, day: 28).date let formatter = DateFormatter() formatter.locale = Locale.current formatter.setLocalizedDate

我正在尝试使用
日期格式化程序
以“[一年中的一周][一年]”组合的格式打印给定的日期。我给了它一个“wyyy”模式,但它返回一个空字符串

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使用的是。我想从那以后情况就没变过

在unicode.org文档中,没有特别提到一年中的一周是如何与一年格式结合的。我错过了什么

编辑我知道我可以使用
DateComponents
获取数字并以这种方式对其进行格式化,但这个问题更多的是关于
“w 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))


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

formatter.setLocalizedDateFormatFromTemplate("w yyyy")

它按预期工作

编辑: 似乎你应该使用:

formatter.dateFormat = "w Y"

y
yyyy
不会给出特定日期的正确结果。

感谢您的回复。我知道如何获取数字并对其进行格式化,这就是为什么格式化字符串是特殊的。我已经更新了我的问题。@AllenZeng这个答案也不正确。weekOfYear的正确年份日期组件是
yearForWeekOfYear
您使用了错误的格式。对于
weekOfYear
你应该使用
Y
而不是
yyyy
@LeoDabus你的意思是
“wyyy”
“wy”
?你只需要一个Y
“wy”
。YYYY可能会以同样的方式使用
“wy”
setLocalizedDataFormatFromTemplate
也只返回一个空字符串,但这是更正确的使用格式。我能让它工作的唯一方法是直接将它分配给@duncac描述的
dateFormat
。你使用了错误的格式,并且相信它不会像预期的那样工作。对于
weekOfYear
您应该使用
Y
而不是
yyyy
我只是使用与OP相同的格式字符串。为什么您需要在一年中的一周使用
Y
而不是
yyyyy
呢?weakOfYear的年份不一定与常规的yyyyyyah相同,我查了一下,在描述中看到了这一点。我想知道更具体的意思是什么?为什么一年中的年/周与年/月/日和其他日期表达式的年不同?尝试使用y和y,但通过一年中的最后一天,您将看到我的意思
let lastDayOFYear=DateComponents(日历:。当前,时区:。当前,年:2018,月:12,日:31)。日期2019年第一周
formatter.dateFormat = "w yyyy"
formatter.dateFormat = "w Y"