Objective c 如何从给定的数字中获取星期几
我想知道给定数字的星期几名称,以下是伪代码:Objective c 如何从给定的数字中获取星期几,objective-c,nsdate,nsdateformatter,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 我尝试了以下代码,
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
有什么想法吗?任何更好的解决方案…既然这已成为公认的答案,我也将在这里发布“正确”的解决方案。归功于罗布的回答 整个过程只需使用
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
,这是指针值,即当转换为NSInteger
时,NSNumber*
您应该在方法签名中使用[dayOfWeek integerValue]
或直接将dayOfWeek
转换为NSInteger
另外,我认为您还弄错了什么:从setWeekday:
设置接收器的工作日单位数。平日单位为
数字1到n,其中n是一周中的天数。
例如,在公历中,n是7,星期天是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];
}
看
只需使用工作日符号即可检索日名。Petronella,非常感谢您提供了一个准确、完整且解释得很好的答案!我不知道什么是盒装表达式,我会马上用谷歌搜索它。我觉得使用NSNumber有点愚蠢,我不太了解使用NSNumber这个类的意义…不客气。这里有一个关于
NSNumber
的相关答案:而且我只需要得到一个NSInteger
作为参数。无需在内部对其进行转换;)仍然不正确,NSInteger
不是一个对象,因此您不应该传递一个点。因此,避免使用get
来启动方法名称。有一种更简单的方法来获取工作日名称。请参见NSDateFormatter weekdaySymbols
。您的区域设置不正确。如果你想让我们学英语,就必须是“en_US”。首先是语言代码(小写),然后是国家代码(大写)。没错,但我知道,最大的问题是加布里埃尔·彼得罗内拉耶斯发现的。但是,如果只使用工作日符号
,代码可以减少到3行。不需要NSCalendar
、NSDateComponents
或NSDate
。您所需要的只是一个简单的NSDateFormatter
,然后访问weekdaySymbols
数组,直接从索引中获取工作日的名称。@rmaddy是绝对正确的,令人遗憾的是,接受的答案没有“正确”的解决方案,所以它就在这里。