NSCalendar ordinalityOfUnit不会正确返回星期几

问题描述 投票:0回答:1

我必须在Objective C类中确定星期几。试图使用这种方法:

- (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中首次弃用,因此很久以前)。有点害怕使用旧的弃用方法进行生产。有没有办法使(甚至非常)新方法有效?

ios objective-c nscalendar
1个回答
1
投票

来自ordinalityOfUnit:inUnit:forDate:文档:

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

您为前两个参数指定了相同的单位,您需要指定第一个的日期和第二个的星期:

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

HTH

© www.soinside.com 2019 - 2024. All rights reserved.