NSCalendar ordinalityOfUnit 没有正确 return 星期几

NSCalendar ordinalityOfUnit doesn't return the day of the week correctly

我必须在 Objective C class 中确定星期几。 尝试使用此方法:

- (NSUInteger)ordinalityOfUnit:(NSCalendarUnit)smaller 
                        inUnit:(NSCalendarUnit)larger 
                       forDate:(NSDate *)date; 

这是我的代码:

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
(int) [gregorian ordinalityOfUnit:NSCalendarUnitWeekday inUnit:NSCalendarUnitWeekday forDate:[NSDate date]];

它总是returns-1,不管是哪一天。即使我改变了日期,或者循环了整整一周。 但是,使用这种方法,效果很好:

- (NSDateComponents *)components:(NSCalendarUnit)unitFlags 
                        fromDate:(NSDate *)date;

到目前为止一切顺利。唯一的问题是:此方法已弃用(在 iOS 8.0 中首次弃用,很久以前)。 有点害怕使用旧的已弃用方法进行生产。有没有办法使(甚至不是很)新方法起作用?

来自 ordinalityOfUnit:inUnit:forDate: 文档:

Returns, for a given absolute time, the ordinal number of a smaller calendar unit (such as a day) within a specified larger calendar unit (such as a week).

您为前两个参数指定了相同的单位,您需要为第一个参数指定天,第二个参数指定周:

[gregorian ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitWeekOfMonth forDate:[NSDate date]]

HTH