Swiftui 年的周数在一年的最后一周变为1

Swiftui 年的周数在一年的最后一周变为1,swiftui,Swiftui,在这种情况下,一年中最后一周的输出变为1而不是53,如何更改它以显示正确的周数 struct ContentView: View { @State var date = Date() var weekFormatter: DateFormatter{ let formatter = DateFormatter() formatter.dateFormat = "w" return formatt

在这种情况下,一年中最后一周的输出变为1而不是53,如何更改它以显示正确的周数

struct ContentView: View {
   
    @State var date = Date()
    
    var weekFormatter: DateFormatter{
        let formatter = DateFormatter()
        formatter.dateFormat = "w"
        return formatter
    }
    
    var body: some View {
        VStack{
            DatePicker(selection: $date, displayedComponents: .date, label: {Text("Bing")})
            Text("\(date, formatter: weekFormatter)")
        }
    }
    
}

日期格式中
w
字符的含义由描述。从第37版开始,它说:

8.4一年中的一周 对于公历,为“年中的一周”字段计算的值范围为1到53(对于其他日历,它们可能具有不同的范围)。一年的第1周是从该年开始至少包含指定最小天数的第一周。一年的第1周和下一年的第1周之间的周从2到52或53(如果需要)按顺序编号。例如,1998年1月1日是星期四。如果一周的第一天是星期一,一周的最少天数是4天(这些数值反映了ISO 8601和许多国家标准),那么1998年的第一周从1997年12月29日开始,到1998年1月4日结束。但是,如果一周的第一天是星期日,则1998年的第1周从1998年1月4日开始,到1998年1月10日结束。1998年的前三天是1997年第53周的一部分

对于月份中的一周,也会计算类似的值

因此,如果您想更改周的编号方式,则需要更改一周的第一天,或一周中的最短天数,或同时更改两者。通过创建,设置
firstWeekday
minimumDaysInFirstWeek
属性,然后将
日历
分配给
日期格式化程序的
日历
属性:

var calendar = Calendar(identifier: .gregorian)
calendar.firstWeekday = ...
calendar.minimumDaysInFirstWeek = ...
let formatter = DateFormatter()
formatter.calendar = calendar
formatter.dateFormat = "w"

日期格式中
w
字符的含义由描述。从第37版开始,它说:

8.4一年中的一周 对于公历,为“年中的一周”字段计算的值范围为1到53(对于其他日历,它们可能具有不同的范围)。一年的第1周是从该年开始至少包含指定最小天数的第一周。一年的第1周和下一年的第1周之间的周从2到52或53(如果需要)按顺序编号。例如,1998年1月1日是星期四。如果一周的第一天是星期一,一周的最少天数是4天(这些数值反映了ISO 8601和许多国家标准),那么1998年的第一周从1997年12月29日开始,到1998年1月4日结束。但是,如果一周的第一天是星期日,则1998年的第1周从1998年1月4日开始,到1998年1月10日结束。1998年的前三天是1997年第53周的一部分

对于月份中的一周,也会计算类似的值

因此,如果您想更改周的编号方式,则需要更改一周的第一天,或一周中的最短天数,或同时更改两者。通过创建,设置
firstWeekday
minimumDaysInFirstWeek
属性,然后将
日历
分配给
日期格式化程序的
日历
属性:

var calendar = Calendar(identifier: .gregorian)
calendar.firstWeekday = ...
calendar.minimumDaysInFirstWeek = ...
let formatter = DateFormatter()
formatter.calendar = calendar
formatter.dateFormat = "w"