如何从给定数字获得星期几

时间:2013-08-19 14:42:08

标签: objective-c nsdate nsdateformatter

我希望获得给定数字的星期名称,这里是伪代码:

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

有什么想法吗?任何更好的解决方案......

3 个答案:

答案 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)