我有一个问题: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
我应该得到日期:2012-11-23 14:18:28 +0000 日期值:5 星期五
最佳答案
问题是,您实际上在这里处理三个单独的对象: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);
关于objective-c - setFirstWeekday 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13530926/