首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从给定的数字中获取一周中的一天

如何从给定的数字中获取一周中的一天
EN

Stack Overflow用户
提问于 2013-08-19 14:42:08
回答 3查看 2.1K关注 0票数 2

我想要一个给定号码的星期一天的名字,这是伪代码:

代码语言:javascript
复制
getDayStringForInt:0 = sunday
getDayStringForInt:1 = monday
getDayStringForInt:2 = tuesday
getDayStringForInt:3 = wenesday
getDayStringForInt:4 = thursday
getDayStringForInt:5 = friday
getDayStringForInt:6 = saturday

我试过用下面的代码,但有些东西不起作用.

代码语言:javascript
复制
- (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];

}

我的日志很奇怪:

代码语言:javascript
复制
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

知道吗?任何更好的解决办法..。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-19 14:45:25

由于这已成为公认的答案,我将在这里张贴“正确”的解决方案。罗伯的答案。

整个过程可以简单地使用[shortWeekdaySymbols][1]方法NSDateFormatter来实现,所以完整的解决方案归结为

代码语言:javascript
复制
- (NSString *)stringFromWeekday:(NSInteger)weekday {
    NSDateFormatter * dateFormatter = [NSDateFormatter new];
    dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
    return dateFormatter.shortWeekdaySymbols[weekday];
}

原始答案

注意,您正在传递一个指向NSNumber的指针,该指针指向需要NSInteger的方法。编译器没有警告您,因为指针确实是一个整数,只是不是您所期望的。考虑一下这个简单的测试:

代码语言:javascript
复制
- (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,所以你最好也检查一下与你的代表的通信。

票数 8
EN

Stack Overflow用户

发布于 2013-08-19 16:33:30

请参阅ref/occ/instm/NSDateFormatter/weekdaySymbols

只需使用weekdaySymbols检索日期名称。

票数 1
EN

Stack Overflow用户

发布于 2013-08-19 15:16:33

感谢每一个人,这里有一个清晰的回答:

代码语言:javascript
复制
/**
 *  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];
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18316614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档