2012-11-23 27 views
2

我有一個問題:setFirstWeekDay不工作...我不知道爲什麼...setFirstWeekday不起作用

NSCalendar *gregorianT = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    [gregorianT setFirstWeekday:2]; 
NSDateFormatter *formatDayWeek = [[NSDateFormatter alloc] init]; 
    [formatDayWeek setDateFormat:@"c EEEE"]; 

    NSLog(@"date : %@ value for date : %@", dateForMonth, [formatDayWeek stringFromDate:dateForMonth]); 

這是我得到:

date : 2012-11-23 14:18:28 +0000 value for date : 6 Friday 

我應該得到date : 2012-11-23 14:18:28 +0000 value for date : 5 Friday

+0

'dateForMonth'是如何定義的? –

+0

- (NSMutabl eArray *)setInfoForSpecificDate:(NSDate *)dateForMonth 它是[NSDate date]; – xGoPox

+0

我的iPad設置爲美國格式,但即使它是美國我想我的星期一在1上,然後星期五將是5 ...:o – xGoPox

回答

4

問題是,你真的在​​這裏處理三個單獨的對象:一個NSCalendar,一個NSDate和一個NSDateFormatter(它不使用你創建的NSCalendar對象)。三者不是隱含關聯的;當您將NSDate傳遞給日期格式化程序時,您完全將自定義的NSCalendar與修改的工作日一起拉出等式。請記住:一個NSDate對象只是一個從參考點開始的時間測量(例如從格林威治標準時間1/1/2001 GMT開始的秒數)......這是日曆對象,它具有「日期名稱」的概念, 「等的時間這一措施

如果你想看到修改後的序數,通過在您的日曆對象格式:

NSCalendar *gregorianT = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
[gregorianT setFirstWeekday:2]; 

NSDateFormatter *formatDayWeek = [[NSDateFormatter alloc] init]; 
[formatDayWeek setCalendar:gregorianT]; 
[formatDayWeek setDateFormat:@"c EEEE"]; 

NSLog(@"Value for date: %@", [formatDayWeek stringFromDate:dateForMonth]); 

...或者你可以直接從你的NSCalendar訪問序數對象

NSCalendar *gregorianT = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
[gregorianT setFirstWeekday:2]; 

NSUInteger valueOfDay = [gregorianT ordinalityOfUnit:NSWeekdayCalendarUnit inUnit:NSWeekCalendarUnit forDate:dateForMonth]; 

NSLog(@"Value for date : %ld", (long)valueOfDay);