[英]How to get the day of week from a given number
我想要给定号码的星期几名称,这是伪代码:
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
任何想法 ? 任何更好的解决方案...
由于这已成为公认的答案,因此我也将在此处发布“正确的”解决方案。 归功于Rob的回答。
可以使用NSDateFormatter
的[shortWeekdaySymbols][1]
方法简单地完成整个过程,因此完整的解决方案可以归结为
- (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
的值,即指针值,即185035664
为NSInteger
NSNumber *
。
您应该使用[dayOfWeek integerValue]
或直接在方法签名dayOfWeek
转换为NSInteger
。
我还认为您遇到了其他问题:来自setWeekday:
的文档setWeekday:
设置接收方的工作日单位数。 工作日单位是从1到n的数字,其中n是一周中的天数。 例如, 在阳历中,n是7,而星期日则由1表示 。
周日是1,所以您最好也检查一下与您的表示形式的对应关系。
谢谢大家,这是一个明确的答复:
/**
* 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];
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.