2010-08-19 45 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];你已经改变了组件之后。

我添加了额外的本地和其他组件的上下文,以防您也想设置它们。

这是免费的代码,不要敲它。