【问题标题】:Geting day number from NSDate从 NSDate 获取天数
【发布时间】:2012-12-01 08:58:30
【问题描述】:

我需要从 NSDate 中获取星期几作为数字。

例如,如果今天是星期四,我应该得到 4 号,如果是星期五,那么我应该得到 5 号。

此功能是否已经存在?

【问题讨论】:

  • 根据您的要求,星期四->4,星期一->1。我已经发布了答案,请检查并更新我。

标签: objective-c cocoa cocoa-touch date nsdate


【解决方案1】:

如文档中所说:https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html

用途:

NSCalendar * calendar = [NSCalendar  currentCalendar];
[calendar components:NSWeekdayCalendarUnit fromDate:date];
int weekday = [weekdayComponents weekday];

但请注意,使用此代码时,1 是星期日。

【讨论】:

    【解决方案2】:

    像这样使用NSCalendar

    NSCalendar *calObject = [NSCalendar currentCalendar];
    NSDateComponents *comp = [calObject components:NSWeekdayCalendarUnit 
                                          fromDate:yourDateHere]; //provide date here
    
    NSInteger day = [comp weekday]; //will return  1 = Sunday, 2 = Monday, etc.
    

    【讨论】:

    • [comp weekday] 返回 NSInteger 或 long,你将它保存在 int 中......仅此而已。但是苹果拒绝了带有这些小警告的代码:(而且你的分数比我多 4 倍,不要叫我先生 :)
    • 但是你说这不是使用 int 而不是 NSInteger 的正确答案,可以根据我使用的要求进行更改
    【解决方案3】:

    根据您的要求,以下代码为您提供今天的“4”,即 2012 年 12 月 13 日星期四

    NSMutableDictionary *weeks=[NSMutableDictionary new];
    [weeks setObject:@"1" forKey:@"Monday"];
    [weeks setObject:@"2" forKey:@"Tuesday"];
    [weeks setObject:@"3" forKey:@"Wednesday"];
    [weeks setObject:@"4" forKey:@"Thursday"];
    [weeks setObject:@"5" forKey:@"Friday"];
    [weeks setObject:@"6" forKey:@"Saturday"];
    [weeks setObject:@"7" forKey:@"Sunday"];
    
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"EEEE"];
    
    NSLog(@"%@",[weeks objectForKey:[dateFormatter stringFromDate:[NSDate date]]]);//gives you 4 for today i.e. Thursday 13 Dec 2012
    

    有点棘手

    NSCalendar *calender = [NSCalendar currentCalendar];
    NSDateComponents *dateComponents = [calender components:NSWeekdayCalendarUnit fromDate:[NSDate date]];
    NSInteger dayCount = [dateComponents weekday]-1;
    if (dayCount==0) {//as sunday will become 0, you need 7.
        dayCount=7;
    }
    NSLog(@"Day count : %ld",dayCount);
    

    【讨论】:

    • 对于任何不使用英语的语言环境,该解决方案的前半部分都将失败。
    • @rmaddy:好的,在那种情况下...我正在删除第一个答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多