2010-08-19 46 views
10

我需要能夠從nsdate得到星期幾,我有下面的代碼,它總是返回1.我試圖改變月份,我嘗試了從1到12的所有內容,但是一週的結果總是1。客觀C - 我如何從NSDate獲得工作日?

NSDate *date2 = [[NSDate alloc] initWithString:[NSString stringWithFormat:@"%d-%d-%d", 2010, 6, 1]]; 
unsigned units2 = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit; 
NSCalendar *calendar2 = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *components2 = [calendar2 components:units2 fromDate:date2]; 
int startWeekDay = [components2 weekday]; 
[date2 release]; 
[calendar2 release]; 
+0

可能的重複[如何使用Cocoa Touch獲取星期幾?](http://stackoverflow.com/questions/4269093/how-do-i-get-the-day-of-the-每週用可可觸摸) – Suhaib 2016-10-05 03:34:32

回答

6

編輯爲Mac:

所述字符串的格式必須是-YYYY-MM-DD HH:MM:根據文檔SS±HHMM,所有字段強制

Old answe R(適用於iPhone和模擬器測試):

有一個在NSDate無(公共)-initWithString:方法,以及你得到返回的你所期望的。

使用正確配置(您需要輸入格式)NSDateFormatter-dateFromString:

+0

是的,有> - initWithString:和我的問題是我的字符串的格式 – aryaxt 2010-08-19 17:50:06

+0

對不起,在iPhone NSDate中找不到這個。我編輯我的答案... – Eiko 2010-08-19 17:57:43

43

創建只包含星期幾的NSDateFormatter將做你想要的。

NSDate *now = [NSDate date]; 
NSDateFormatter *weekday = [[[NSDateFormatter alloc] init] autorelease]; 
[weekday setDateFormat: @"EEEE"]; 
NSLog(@"The day of the week is: %@", [weekday stringFromDate:now]); 

如果你需要國際化,NSDateFormatter可以發送一個語言環境,這將得到正確的翻譯。

日期格式化通過此標準控制:Unicode Date Formats

+0

我認爲OP需要一個星期幾的整數(例如,1 =星期一,2 =星期二,3 =星期三等)。 – dreamlax 2010-08-19 21:11:07

+0

是的,這就是我正在尋找 – aryaxt 2010-08-20 00:57:33

+2

如果你想要一個整數你只是一個集合:[weekday setDateFormat:@「e」];你也應該設置NSLocale ...例如:NSLocale * deLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@「de_DE」] autorelease]; [weekday setLocale:deLocale];否則,星期四可能是5而不是4,如果星期的開始日期是星期日或星期一.. – 2012-01-12 20:14:58

0

我解決了這個問題,但問題是,我的日期字符串的格式是錯誤的:

NSDate *date = [[NSDate alloc] initWithString:[NSString stringWithFormat:@"%d-%d-%d 10:45:32 +0600", selectedYear, selectedMonth, selectedDay]]; 

,因爲我不在乎關於時間我隨意傳遞時間字符串的結尾

0

我使用的Xcode 6.4

有很多方式設置的NS日期。我不會在這裏繼續。你用一種方法做了它,使用了一個字符串(由於它很容易出錯,我避免了一種方法),而我正在以另一種方式設置它。無論如何,請在工作日或setDay方法中訪問您的組件。

NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar]; 
[calendar setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en-US"]]; 
NSDateComponents *components = [calendar components:(NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitWeekday|NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond) fromDate:[NSDate date]]; 
    NSDate *date = [calendar dateFromComponents:components]; 

這樣,你就可以獲取或設置任何這些組件是這樣的:

[components weekday] //to get, then doSomething 
[components setDay:6]; //to set 

,當然,設置NSDate *date = [calendar dateFromComponents:components];你已經改變了組件之後。

我添加了額外的本地和其他組件的上下文,以防您也想設置它們。

這是免費的代碼,不要敲它。