سلوك غريب عند إنشاء nsdate في يناير الأول والثاني
-
28-09-2019 - |
سؤال
أقوم بإنشاء موعد مثل هذا:
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"YYYY"];
NSInteger year = [[dateFormatter stringFromDate:[NSDate date]] intValue];
NSLog(@"NSInteger YEAR : %d\n", year);
//minutes, hours, day and month are initialized elsewhere...
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setYear:year];
[comps setMonth:month];
[comps setDay:day];
[comps setHour:hours];
[comps setMinute:minutes];
NSDate *sampleDate = [gregorian dateFromComponents:comps];
NSLog(@"sampleDate YEAR : %d\n", [[dateFormatter stringFromDate:sampleDate] intValue]);
مشكلتي هي أنه عندما يكون التاريخ هو الأول من يناير أو الثاني من يناير ، فإن العام غير صحيح .. يجب أن يكون هنا 2010 (حيث أسترجع عام اليوم) ، لكن في الواقع عام 2009 ... لا أفهم السبب! وهذا يحدث فقط لتلك الأيام 2 ...
هل لديك أي فكرة لماذا هي بهذه الطريقة؟ شكرا لكم مقدما.
المحلول
انظر معيار يونيكود. يمنحك "Yyyy" (الحالة السفلية) العام ، لكن "Yyyy" (الحالة العليا) يمنحك السنة لأسبوع التاريخ (أي إذا كان التاريخ خلال الأسبوع 52 من العام الماضي ، سيكون Yyyy العام الماضي ).
لا تنتمي إلى StackOverflow