目标C - 如何从NSDate获得工作日?

ary*_*axt 11 objective-c nsdate weekday

我需要能够从nsdate获得工作日,我有以下代码,它总是返回1.我试图改变月份,我尝试了从1到12的所有内容,但是工作日的结果总是1.

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];
Run Code Online (Sandbox Code Playgroud)

Jon*_*ier 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]);
Run Code Online (Sandbox Code Playgroud)

如果您需要国际化,NSDateFormatter可以发送一个区域设置,这将提供正确的翻译.

日期格式化程序通过此标准控制:Unicode日期格式

  • 如果你想要整数,你只需要一个集合:[weekday setDateFormat:@"e"]; 您还应该设置NSLocale ...例如:NSLocale*deLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"de_DE"] autorelease]; [平日setLocale:deLocale]; 否则星期四可能是5而不是4,如果一周的开始日是星期日或星期一.. (2认同)

Eik*_*iko 6

编辑Mac:

根据文档,字符串的格式必须是-YYYY-MM-DD HH:MM:SS±HHMM,所有字段都是必填字段

旧答案(适用于iPhone并在模拟器上测试):

没有(公共)-initWithString:方法NSDate,你得到的回报不是你所期望的.

使用正确配置(您需要提供输入格式)NSDateFormatter-dateFromString:.