2013-07-11 78 views
6

我想從日期中獲得一年的星期編號。我嘗試了下面的代碼,但給了我一個錯誤的星期編號。在iOS SDK中獲取星期編號

我一週數字代碼:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"YYYY-MM-dd"]; 
    NSDate *date = [dateFormatter dateFromString:@"2012-09-15"]; 


    NSCalendar *calendar = [NSCalendar currentCalendar]; 

    NSLog(@"week: %i", [[calendar components: NSWeekOfYearCalendarUnit fromDate:date] weekOfYear]); //Display 38 instead of 37 
} 

注:如果我嘗試用[NSDate date]顯示正確。

幫我解決這個.. 謝謝

+0

看到我的答案的http:// stackoverflow.com/questions/17403761/get-the-day-from-the-date-in-ios-sdk/17403855#17403855 –

+2

日期的星期編號有不同的定義。我認爲這是你的問題最可能的原因。詳情請參閱http://en.wikipedia.org/wiki/Calendar_week#Week_numbering。 – Treb

+0

@ SAMIRRATHOD,謝謝你的回覆......它只是顯示了一週的日子,而不是一週的數字。 – user2526811

回答

17

的ObjectiveC:

NSCalendar *calendar = [NSCalendar currentCalendar]; 
NSDateComponents *dateComponent = [calendar components:(NSWeekOfYearCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:[NSDate date]]; 
NSLog(@"%@",dateComponent); 

斯威夫特:

let calendar = NSCalendar.currentCalendar() 
let dateComponent = calendar.components([.WeekOfYear, .Day, .Month, .Year], fromDate: NSDate(timeIntervalSinceNow: 0)) 
print("weekOfYear \(dateComponent.weekOfYear)") 

斯威夫特3:

let component = Calendar.current.component(.weekOfYear, from: Date()) 
print("Week of Year \(component)") 
+0

感謝您的回覆..但是,當我嘗試從字符串如上所示給出日期時,它會返回錯誤的星期編號。 – user2526811

+0

使用NSDateComponents –

+0

**非常感謝您的回答!!!!! ** – user2526811

11

[NSCalendar currentCalendar] GI默認情況下,您將公曆作爲公曆。您可以使用

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSISO8601Calendar]; 

獲得的ISO 08601符合日曆,其中有周數您的日期。

+0

對不起,但對於'2012-09-25',它返回_38而不是39_。 **現在有什麼問題?** – user2526811

+0

嘗試將日曆的第一個星期設置爲正確的值(我不知道哪個..) - (void)setFirstWeekday:(NSUInteger)weekday – AlexVogel

+0

我得到了解決方案。 – user2526811

0

斯威夫特3: 你需要知道的最後Date選定的月份。比本週一周的支票號碼,而這將是你本月週數

return Calendar.current.component(.weekOfMonth, from: lastDate ?? Date()) 
0
在的ObjectiveC

更新代碼中使用的Xcode版本 - 9.1 - :

NSCalendar *calendar = [NSCalendar currentCalendar]; 
    NSDateComponents *dateComponent = [calendar components:(NSCalendarUnitWeekOfYear | NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear) fromDate:[NSDate date]]; 
    NSLog(@"%ld",(long)[dateComponent weekOfYear]);