سؤال

أقوم بإنشاء عرض تقويمي أسبوعي ، وجزء من ذلك هو حساب اليوم الأول من الأسبوع المعروض. أريد أيضًا أن يكون الموعد المحفوظ وقتًا للثانية الأولى ، لذلك أحاول التأكد من أن HH: MM: SS للتاريخ كلها 00:00:00.

لدي الرمز التالي ، الذي يعمل بشكل جيد في معظم الحالات ولكنه يعطي نتائج عشوائية على ما يبدو عندما تكون التواريخ في بداية أو نهاية العام.

unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit | NSWeekCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;

NSDateComponents *comps = [gregorian components:unitFlags fromDate:self.selectedDate];
NSDateComponents *addcomps = [[NSDateComponents alloc] init];
[addcomps setDay:1-[comps weekday]];

NSDate *fixedDate = [appDelegate.gregorian dateByAddingComponents:addcomps toDate:self.selectedDate options:0];
////FIXED DATE IS NOW FIRST DAY OF DISPLAYED WEEK

comps = [appDelegate.gregorian components:unitFlags fromDate:fixedDate]; ///fixedDate = 2010-01-03 02:51:25 -0600
[comps setHour:0];
[comps setMinute:0];
[comps setSecond:0];
self.savedBeginningDate = [appDelegate.gregorian dateFromComponents:comps]; ///self.savedBeginningDate = 2011-01-09 00:00:00 -0600

بطريقة ما ، قم بإعداد HH: MM: SS إلى 00:00:00 يغير التاريخ من 3 يناير 2010 إلى 11 يناير 2009.

لقد أضفت نتائج DateFromComponents كتعليقات على هذه الخطوط. يبدو أن هذا السلوك الغريب يحدث فقط عندما يصادف العام ولا يحدث لأي أسبوع آخر رأيته.

شكرا على اي مساعدة!

هل كانت مفيدة؟

المحلول

لقد اكتشفت هذا: اضطررت إلى إخراج NSWeekCalendarUnit من unitflags. لا دليل لماذا ، ولكن لسبب ما مع ذلك هناك كانت التواريخ حساب غير صحيح!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top