2015-11-17 2 views
1

, поэтому я делаю основной выбор недели, где вы можете выбрать номер недели и год и получить соответствующую дату с начальной точки недели.NSDateComponents weekOfYear возвращает неверную дату

Базовый сценарий тестирования

let calendar = NSCalendar.currentCalendar() 
let components = NSDateComponents() 
components.year = 2015 
components.weekOfYear = 15 
print(calendar.dateFromComponents(components)!) 

Вы можете видеть, что я установить разыскиваемый год к 2015 году и разыскиваемый неделю до 15, но результат я получаю: «2014-12-31 23:00 : 00 +0000 "

... и это действительно заставляет меня повесить. Независимо от того, какую неделю и год я выбираю, он всегда будет выключен и в декабре.

Заранее благодарю вас за помощь.

ответ

4

weekOfYear работает в сочетании с yearForWeekOfYear:

let calendar = NSCalendar.currentCalendar() 
let components = NSDateComponents() 

components.yearForWeekOfYear = 2015 
components.weekOfYear = 15 

print(calendar.dateFromComponents(components)!) 
// 2015-04-05 22:00:00 +0000 

Обновление для Swift 3 и позже:

let calendar = Calendar.current 
var components = DateComponents() 

components.yearForWeekOfYear = 2015 
components.weekOfYear = 15 

print(calendar.date(from: components)!) 
+1

мало интересное примечание, установка дня недели 1 также дает результат, просто подумал, что это интересно, и следует упомянуть – Knight0fDragon

+0

@ Knight0fDragon: Интересно, что, похоже, тоже работает. Но лучше установить 'components.weekday = calendar.firstWeekday', потому что воскресенье - это не первый день недели. –

Смежные вопросы