Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何从给定的数字中获取星期几_Objective C_Nsdate_Nsdateformatter - Fatal编程技术网

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是绝对正确的,令人遗憾的是,接受的答案没有“正确”的解决方案,所以它就在这里。