내가 일 '2014년 12월 31일'로 weekofYear을 얻을 싶어하지만 항상 반환에 복귀 한 여기 내 코드 (52) 하지 1 나는 결과가 옳다는 것을 알고 있지만 "52"를 "1"이 아닌, 어떻게 고쳐야할까요?NSCalendar NSDateComponents weekofYear는 날짜 2014년 12월 31일
답변
날짜 구성 요소를 가져 오기 전에 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
하지만이 또한 2015-1-152 주일이됩니다. – tia
다른 방법은 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
또는 때때로 53 주. 여기 : http://kalenderwoche.net/alle-kalenderwochen-2009.php (독일어는 유감이지만 숫자는 동일합니다.) – ecth
주의가
과 날이
(그래서 2014 년의 마지막 세 일 중 하나) (20)보다 큰 1 (2014 2015 또는 지난 몇 일의 첫번째 일) 인 경우THEN (날짜의 주 - 5 일을 계산하고 1을 더합니다).
이렇게하면 일주일 중 마지막 며칠을 일주일에 52 주, 때로는 53 주인 자신의 주간으로 만듭니다. 그리고 그것은 유럽 및 미국 달력과 함께 작동합니다.
1 월 1 일이 전년도 마지막 주에있는 경우 원하는 것을 생각해야합니다. 이제는 표준을 따르고 iOS가 말하는 것을 받아들이면 그것을하는 것이 더 건전한 방법입니다.
아마도 2015 년 첫 주는 2015 년 1 월 1 일을 포함하는 주일 것입니다. (그러나이 행동은 잘 설명되어 있지 않습니다.) –