我希望获得给定数字的星期名称,这里是伪代码:
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
有什么想法吗?任何更好的解决方案......
答案 0 :(得分:6)
由于这已经成为公认的答案,我也会在这里发布“正确”的解决方案。致Rob的回答。
使用[shortWeekdaySymbols][1]
的{{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
时投放到NSNumber *
。
您应该使用NSInteger
或直接将[dayOfWeek integerValue]
转换为方法签名中的dayOfWeek
。
此外,我认为你得到的其他错误:来自NSInteger
设置接收器的工作日单位数。平日单位是 数字1到n,其中n是一周中的天数。 例如,公历中的,n为7,星期日为 由1 表示。
星期天是1,所以你最好还要检查与你的陈述的对应关系。
答案 1 :(得分:0)
对每个人来说,这是一个干净的回应:
/**
* 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];
}
答案 2 :(得分:0)