我有这个代码,它带有工作日的名称和提供的值,今天是2014年8月10日,应该返回星期日,但代码是星期二返回,为什么?
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
[dateComponents setWeekday:10];
[dateComponents setWeekdayOrdinal:1];
[dateComponents setYear:2014];
[dateComponents setMonth:8];
NSDate *tempDate = [gregorian dateFromComponents:dateComponents];
NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"EEEE"];
NSString *retval = [format stringFromDate:tempDate];
NSLog(@"Today -> %@",retval);
答案 0 :(得分:2)
您的代码存在一些问题。在格里高利历中,首先weekday
属性可以是1到7之间的数字。
来自NSDateComponents documentation:
工作日单位是数字1到n,其中n是一周中的天数。例如,在公历中,n为7,星期日由1表示。
因此,如果您想创建代表星期日的NSDateComponents
,则必须将weekDay
属性值设置为1。
您还必须更改weekdayOrdinal
属性的值。
来自NSDateComponents documentation:
工作日序数单位表示下一个较大日历单位中工作日的位置,例如月份。例如,2是该月第二个星期五的工作日序数单位。
在这种情况下,您必须将其值设置为2,因为您要为该月的第二个星期日创建NSDateComponents
。
以下是更改的代码:
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
[dateComponents setWeekday:1];
[dateComponents setWeekdayOrdinal:2];
[dateComponents setYear:2014];
[dateComponents setMonth:8];
话虽如此,使用day
属性可能很简单,完全忘记了weekday
和weekdayOrdinal
属性:
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
[dateComponents setDay:10];
[dateComponents setYear:2014];
[dateComponents setMonth:8];