عدد أسابيع التقويم للسنة (تعريف الأيزو 8601)
-
13-12-2019 - |
سؤال
كيف يمكنني حساب عدد التقويمأسابيع في الهدف-ج لسنة معينة.
حاولت:
[calendar rangeOfUnit:NSWeekOfYearCalendarUnit inUnit: NSYearCalendarUnit forDate: [NSDate date]].length
لكنه يعود 54.
شكرا
المحلول
أنت تستخدم NSWeekOfYearCalendarUnit
, ، لذلك يجب عليك استخدام الوحدة الأكبر المقابلة وهي NSYearForWeekOfYearCalendarUnit
.
NSCalendar *calendar = [NSCalendar currentCalendar];
calendar.firstWeekday = 2;
calendar.minimumDaysInFirstWeek = 4;
int n = [calendar rangeOfUnit:NSWeekOfYearCalendarUnit inUnit:NSYearForWeekOfYearCalendarUnit forDate: [NSDate date]].length;
NSLog(@"%d", n); // 52
أخيرا ، لاحظ أن كلاهما NSWeekOfYearCalendarUnit
و NSYearForWeekOfYearCalendarUnit
هي دائرة الرقابة الداخلية 5.0 ونظام التشغيل العاشر 10.7 فقط.
تحرير
إذا كنت تستخدم تاريخا في أسبوع تقويمي من العام السابق أو العام التالي مثل 1/1/2016 ، فسيحسب هذا عدد الأسابيع في ذلك العام (2015 في المثال) ، وليس السنة الفعلية للتاريخ (2016 في المثال).إذا لم يكن هذا ما تريده ، فيمكنك تغيير التاريخ كما يلي:
NSDateComponents *components = [calendar components:NSYearCalendarUnit fromDate:date];
components.month = 3;
date = [calendar dateFromComponents:components];
نصائح أخرى
بعد كمية كبيرة من الاختبار، إليك وظيفة ستعودها لأي عام:
giveacodicetagpre.أساسا، لكل المواصفات، فإن العدد الإجمالي للأسابيع هو نفس العدد الإجمالي لليوم الخميس في السنة، وهو ما يحسب.
قد اختبرتها في دورة 400 عام بأكملها (بدءا من العام 0 وعاملي 2000) وجميع الحالات تطابق المواصفات.