2014-12-31 2 views
0

내가 일 '2014년 12월 31일'로 weekofYear을 얻을 싶어하지만 항상 반환에 복귀 한 여기 내 코드 (52) 하지 1 나는 결과가 옳다는 것을 알고 있지만 "52"를 "1"이 아닌, 어떻게 고쳐야할까요?NSCalendar NSDateComponents weekofYear는 날짜 2014년 12월 31일

+0

아마도 2015 년 첫 주는 2015 년 1 월 1 일을 포함하는 주일 것입니다. (그러나이 행동은 잘 설명되어 있지 않습니다.) –

답변

0

날짜 구성 요소를 가져 오기 전에 NSCalendar 인스턴스의 minimumDaysInFirstWeek 속성을 설정하십시오.

NSCalendar *calendar = [NSCalendar currentCalendar]; 
calendar.minimumDaysInFirstWeek = 7; // the week has to be completely within one year 

NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSWeekdayCalendarUnit | NSWeekOfMonthCalendarUnit | NSWeekOfYearCalendarUnit; 
NSDateComponents *dateComponent = [calendar components:unitFlags fromDate:[NSDate date]]; 

NSLog(@"%i",dateComponent.weekOfYear); // 52 
+0

하지만이 또한 2015-1-152 주일이됩니다. – tia

1

다른 방법은 NSDateComponents 인스턴스의 yearForWeekOfYear 속성을 사용하는 것입니다. yearForWeekOfYear이 으로 전달 된 날짜 이후 인 경우 52 일입니다.

예.

NSCalendar *calendar = [NSCalendar currentCalendar]; 

NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSWeekdayCalendarUnit | NSWeekOfMonthCalendarUnit | NSWeekOfYearCalendarUnit | NSYearForWeekOfYearCalendarUnit; 
NSDateComponents *dateComponent = [calendar components:unitFlags fromDate:[NSDate date]]; 

NSInteger weekOfYear = dateComponent.weekOfYear; 
if (dateComponent.yearForWeekOfYear > dateComponent.year) 
    weekOfYear = 52; 
NSLog(@"%i",weekOfYear); // 52 
+1

또는 때때로 53 주. 여기 : http://kalenderwoche.net/alle-kalenderwochen-2009.php (독일어는 유감이지만 숫자는 동일합니다.) – ecth

0

주의가

과 날이

(그래서 2014 년의 마지막 세 일 중 하나) (20)보다 큰 1 (2014 2015 또는 지난 몇 일의 첫번째 일) 인 경우

THEN (날짜의 주 - 5 일을 계산하고 1을 더합니다).

이렇게하면 일주일 중 마지막 며칠을 일주일에 52 주, 때로는 53 주인 자신의 주간으로 만듭니다. 그리고 그것은 유럽 및 미국 달력과 함께 작동합니다.

1 월 1 일이 전년도 마지막 주에있는 경우 원하는 것을 생각해야합니다. 이제는 표준을 따르고 iOS가 말하는 것을 받아들이면 그것을하는 것이 더 건전한 방법입니다.