首页 > 解决方案 > 快速找出下周的开始

问题描述

我尝试在用户所在的当前日历中找出下周的开始。我试过了

    public func nextStartOfWeek() -> Date {
       let next = Calendar.current.date(byAdding: .weekOfYear, value: 1, to: self)!
       let components = Calendar.current.dateComponents([.yearForWeekOfYear, .weekOfYear], from: next)
       return Calendar.current.nextDate(after: self, matching: components, matchingPolicy: .nextTime)!
    }

在我的语言环境中,一周从星期一开始,运行配置文件的方案设置为它。不幸的是,这仍然导致星期天作为一周的开始。

我在操场上使用过这段代码

import Foundation

// let s = Date()
let c = Calendar.current

let customDate = DateComponents(calendar: c, timeZone: nil, era: nil, year: 2021, month: 06, day: 15, hour: 0, minute: 0, second: 0, nanosecond: nil, weekday: nil, weekdayOrdinal: nil, quarter: nil, weekOfMonth: nil, weekOfYear: nil, yearForWeekOfYear: nil)
let s = c.date(from: customDate)!

let next = Calendar.current.date(byAdding: .weekOfYear, value: 1, to: s)!

print("Next \(next)")

var components = c.dateComponents([.yearForWeekOfYear, .weekOfYear], from: next)

print("\(components)")

var startOfNextWeek = Calendar.current.nextDate(after: s, matching: components, matchingPolicy: .nextTime)

print("Start of next Week \(startOfNextWeek!)")

预计 2021-06-20 22:00:00(我是 UTC+2),不幸的是它是 2021-06-19。

有没有更好的方法来找出下周的开始?我的错误是什么(在代码或大脑中)?

标签: swift

解决方案


我通过替换 Calendar.current 让它工作(对于法国日历):

var calendar = Calendar(identifier: .gregorian)
calendar.locale = NSLocale(localeIdentifier: "fr_FR") as Locale

func nextStartOfWeek() -> Date {
       let next = calendar.date(byAdding: .weekOfYear, value: 1, to: self)!
       let components = calendar.dateComponents([.yearForWeekOfYear, .weekOfYear], from: next)
       return calendar.nextDate(after: self, matching: components, matchingPolicy: .nextTime)!
}

推荐阅读