我想要一个给定号码的星期一天的名字,这是伪代码:
getDayStringForInt:0 = sunday
getDayStringForInt:1 = monday
getDayStringForInt:2 = tuesday
getDayStringForInt:3 = wenesday
getDayStringForInt:4 = thursday
getDayStringForInt:5 = friday
getDayStringForInt:6 = saturday我试过用下面的代码,但有些东西不起作用.
- (void) setPeriodicityDayOfWeek:(NSNumber *)dayOfWeek{
gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
dateFormatter = [[NSDateFormatter alloc] init];
NSLocale *frLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[dateFormatter setLocale:frLocale];
[gregorian setLocale:frLocale];
NSDate *today = [NSDate date];
NSDateComponents *nowComponents = [gregorian components:NSYearCalendarUnit | NSWeekCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:today];
[nowComponents setWeekday:dayOfWeek];
NSDate *alertDate = [gregorian dateFromComponents:nowComponents];
[dateFormatter setDateFormat:@"EEEE"];
NSLog(@"Day Of Week : %@ - Periodicity : %@", dayOfWeek, [dateFormatter stringFromDate:alertDate]);
alert.periodicity = [dateFormatter stringFromDate:alertDate];}
我的日志很奇怪:
Day Of Week : 0 - Periodicity : monday
Day Of Week : 1 - Periodicity : wenesday
Day Of Week : 2 - Periodicity : friday
Day Of Week : 3 - Periodicity : friday
Day Of Week : 4 - Periodicity : tuesday
Day Of Week : 5 - Periodicity : sunday
Day Of Week : 6 - Periodicity : sunday知道吗?任何更好的解决办法..。
发布于 2013-08-19 14:45:25
由于这已成为公认的答案,我将在这里张贴“正确”的解决方案。罗伯的答案。
整个过程可以简单地使用[shortWeekdaySymbols][1]方法NSDateFormatter来实现,所以完整的解决方案归结为
- (NSString *)stringFromWeekday:(NSInteger)weekday {
NSDateFormatter * dateFormatter = [NSDateFormatter new];
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
return dateFormatter.shortWeekdaySymbols[weekday];
}原始答案
注意,您正在传递一个指向NSNumber的指针,该指针指向需要NSInteger的方法。编译器没有警告您,因为指针确实是一个整数,只是不是您所期望的。考虑一下这个简单的测试:
- (void)foo:(NSInteger)a {
NSLog(@"%i", a);
}
- (void)yourMethod {
[self foo:@1]; // @1 is the boxed expression for [NSNumber numberWithInt:1]
}这会打印类似于185035664的东西,这是指针值,即当转换为NSInteger时的NSNumber *。
您应该在方法签名中使用[dayOfWeek integerValue]或直接将dayOfWeek转换为NSInteger。
另外,我认为你还搞错了:来自setWeekday:的医生
设置接收方的工作日单元数。工作日单位是数字1到n,其中n是一周中的天数。例如,公历中的,n为7,而Sunday由1表示。
星期天是1,所以你最好也检查一下与你的代表的通信。
发布于 2013-08-19 16:33:30
请参阅ref/occ/instm/NSDateFormatter/weekdaySymbols
只需使用weekdaySymbols检索日期名称。
发布于 2013-08-19 15:16:33
感谢每一个人,这里有一个清晰的回答:
/**
* getting the day of week string for a given day of week number
*
* @param dayOfWeekNumber 0 return sunday, 6 return saturday
*
* @return a string corresponding at the given day of week.
*/
- (NSString*) getDayOfWeekStringForDayOfWeek:(NSInteger)dayOfWeek{
return [[dateFormatter shortWeekdaySymbols] objectAtIndex:dayOfWeek];
}https://stackoverflow.com/questions/18316614
复制相似问题