недельный диапазон в swift с недельным годом

#swift

Вопрос:

Не могли бы вы мне помочь, я не знаю, какой конфигурации мне не хватает

Я хочу получить диапазон недель на 2021 год, 37-я неделя в Мексике, которая начинается с понедельника по воскресенье, но, похоже, мой код содержит еще один номер недели, а также начинается с воскресенья по понедельник

Неделя в Мексике начинается с

Неделя 37 13 сентября 2021 года 19 сентября 2021 года

введите описание изображения здесь

 var weekNumber: Int = 0

var calendar = Calendar(identifier: .gregorian)
calendar.firstWeekday = 2
calendar.minimumDaysInFirstWeek = 4
let year = calendar.component(.year, from: Date())

weekNumber  = calendar.component(.weekOfYear, from: Date())
print("weekNumber",weekNumber)
print("Date",Date())
let startComponents = DateComponents(weekOfYear: weekNumber, yearForWeekOfYear: year)
let startDate = calendar.date(from: startComponents)!
let endComponents = DateComponents(day:7, second: 0)
let endDate = calendar.date(byAdding: endComponents, to: startDate)!
print("startDate",startDate)
print("endDate",endDate)

 

введите описание изображения здесь

Ответ №1:

Вы используете неправильный календарь. Первый будний день григорианского календаря-воскресенье, вам нужно использовать календарь ISO8601. Также при использовании weekOfYear вы бы использовали yearForWeekOfYear:


 let now = Date()
var calendar = Calendar(identifier: .iso8601)
let yearForWeekOfYear = calendar.component(.yearForWeekOfYear, from: now)
let weekNumber  = calendar.component(.weekOfYear, from: now)
print("weekNumber", weekNumber)
print("Date", now.description(with: .current))
let startDate = DateComponents(calendar: calendar, weekOfYear: weekNumber, yearForWeekOfYear: yearForWeekOfYear).date!
let endDate = calendar.date(byAdding: .weekOfYear, value: 1, to: startDate)!
print("startDate", startDate.description(with: .current))
print("endDate", endDate.description(with: .current))
 

Это приведет к печати:

Номер недели 37
Дата Воскресенье, 19 сентября 2021 года в 9:07:02 по стандартному времени
Бразилиа, дата начала понедельника, 13 сентября 2021 года в 12:00:00 по Стандартному времени
Бразилиа, дата окончания Понедельника, 20 сентября 2021 года в 12:00:00 по стандартному времени Бразилиа

Комментарии:

1. Спасибо. Я неправильно использовал календарь