2013-06-01 10 views
5

मैं का उपयोग कर एक सप्ताह और somwhere रविवारएनएससीएंडेंडर, पहला वीकडे क्यों सेट करना गणना परिणाम को प्रभावित नहीं करता है?

पर तो मैं सोमवार को शुरू करने के लिए यह निर्धारित करने के लिए, चाहता था सोमवार को तारांकित कर सकते हैं कि किसी निश्चित तिथि के लिए काम करने के दिन की गणना करनी है, तथापि, कैलेंडर के आधार पर,

[[NSCalendar currentCalendar] setFirstWeekday:2]; 

हालांकि, गणना परिणाम एक ही

{ 
    [[NSCalendar currentCalendar] setFirstWeekday:1]; 
    NSDateComponents *weekdayComponents = [[NSCalendar currentCalendar] components:(NSDayCalendarUnit | NSWeekdayCalendarUnit) fromDate:date]; 
    NSInteger weekday = [weekdayComponents weekday] - 1; 
    NSLog(@"%d", weekday); 
} 
{ 
    [[NSCalendar currentCalendar] setFirstWeekday:2]; 
    NSDateComponents *weekdayComponents = [[NSCalendar currentCalendar] components:(NSDayCalendarUnit | NSWeekdayCalendarUnit) fromDate:date]; 
    NSInteger weekday = [weekdayComponents weekday] - 1; 
    NSLog(@"%d", weekday); 
} 

रिटर्न एक ही संख्या, लेकिन क्यों है?

उत्तर

8

जो व्यवहार आप देखते हैं वह सही है। सप्ताहांत घटक पहली वीकडे संपत्ति से प्रभावित नहीं होता है। यदि आपके पास रविवार का प्रतिनिधित्व करने वाली तारीख है तो यह हमेशा रविवार का होगा, आप उस रविवार को या सोमवार को अपना सप्ताह शुरू करेंगे। यह आपके दिनांक घटकों की सप्ताह की संपत्ति में सप्ताह की संख्या को प्रभावित करना चाहिए।

+0

तो रविवार हमेशा सप्ताहांत 0 होगा, इससे कोई फर्क नहीं पड़ता कि पहले वीकडे पॉइंट क्या हैं? –

+5

रविवार हमेशा 1 – Sven

+3

रविवार 1, सोमवार 2, मंगलवार 3, बुधवार 4, शुक्रवार 5, शनिवार 6 –

3

मेरा मानना ​​है कि आपको तिथि घटकों को निकालने का प्रयास करने के बजाय ordinalityOfUnit:inUnit:forDate: विधि का उपयोग करने की आवश्यकता है। इस तरह तो कुछ:

NSUInteger weekday = [[NSCalendar currentCalendar] ordinalityOfUnit:NSWeekdayCalendarUnit inUnit:NSWeekCalendarUnit forDate:date]; 

मूल रूप से है कि कॉल दिए गए दिनांक के सप्ताह (NSWeekCalendarUnit) में दिन (NSWeekdayCalendarUnit) के लिए पूछ रहा है।

यदि यह काम नहीं करता है, तो आपको currentCalendar पर पहले सप्ताह के दिन को संशोधित करने की कोशिश करने के बजाय अपना खुद का कैलेंडर बनाना होगा।

उदाहरण के लिए:

NSCalendarIdentifier calendarIdentifier = [[NSCalendar currentCalendar] calendarIdentifier]; 
NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:calendarIdentifier] autorelease]; 
[calendar setFirstWeekday:2]; 

फिर ordinalityOfUnit:inUnit:forDate: कॉल में है कि नए calendar बजाय वस्तु [NSCalendar currentCalendar] का उपयोग करें।

+0

NSWeekCalendarUnit अब मान्य नहीं है:/ –

+0

शायद दूसरे सप्ताह इकाइयों में से एक का प्रयास करें: 'NSWeekOfMonthCalendarUnit' या' NSWeekOfYearCalendarUnit'। वे वास्तव में इस संदर्भ में समझ में नहीं आते हैं, लेकिन यह कोशिश करने लायक है। –

+1

आईओएस पर 10 सेट फर्स्ट वीकडे: 2 कुछ भी नहीं बदलेगा ... – Dmitry

संबंधित मुद्दे

 संबंधित मुद्दे