2017-12-18 429 views
0

我必须确定Objective C类中的星期几。 尝试使用这种方法:NSCalendar ordinalityOfUnit不会正确返回星期几

- (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]]; 

它总是返回-1,不管今天是什么日子。即使我改变了日期,或者整个星期都在循环。 但是,使用这种方法,它工作得很好:

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

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

+2

https://开头开发商.apple.com/documentation/foundation/nscalendar/1414841-components?language = objc我不认为它已被弃用。 iOS8可能会弃用的是“NSWeekdayCalendarUnit”与“NSCalendarUnitWeekday”。 – Larme

+1

另外,请检查'ordinalityOfUnit:inUnit:forDate:'的文档。它说在某些情况下返回'NSNotFound'(比如'smaller'> ='larger'',因为在你的情况下它们是相等的),'NSNotFound'可以从'NSUInteger'转换为'-1' int' – Larme

+0

Larme:你说得对。谢谢!这是一个简单的解决方案... – gs80

回答

1

ordinalityOfUnit:inUnit:forDate:文档:

返回,对于给定的绝对时间,较小的日历单位的序数(如一天)指定的较大的日历单元内(如一周)。

您已指定相同单元针对前两个参数,你需要为第一和周第二指定一天:

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

HTH