objective-c - setFirstWeekday 不起作用

标签 objective-c nsdate nscalendar

我有一个问题: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/

相关文章:

ios - 将字符串日期转换为 NSDate

ios - 检测 iOS 应用程序中的日期变化

Swift:ISO 8601 日期从星期到年份

ios - 如何在 iphone 日历中跟踪我的应用程序添加的事件

ios - 文本字段确实开始编辑未在自定义单元格上调用

objective-c - 如何从devicename(UITableViewCell)中的tableview中显示蓝牙支持的服务?

iphone - 以编程方式检测 ScrollView 外的触摸

ios - 秒表和计时器

cocoa - NSDate 比较上不兼容的指针类型

ios - 我应该在嵌套 block 中使用 weakSelf 吗?