从iOS sdk中获取date

在我的应用程序中,想从date开始(即SundayMonday等)。

我的代码如下:

 NSDate *currentDate = [NSDate date]; NSCalendar *calendar = [NSCalendar currentCalendar]; //ask for current week NSDateComponents *comps = [[NSDateComponents alloc] init]; comps=[calendar components:NSWeekCalendarUnit|NSYearCalendarUnit fromDate:currentDate]; //create date on week start NSDate* weekstart=[calendar dateFromComponents:comps]; //add 7 days NSMutableArray* week=[NSMutableArray arrayWithCapacity:7]; for (int i=1; i<=7; i++) { NSDateComponents *compsToAdd = [[NSDateComponents alloc] init]; compsToAdd.day=i; NSDate *nextDate = [calendar dateByAddingComponents:compsToAdd toDate:weekstart options:0]; NSLog(@"%@",nextDate); // date is 2013-06-30 18:30:00 +0000 NSDateFormatter *myFormatter = [[NSDateFormatter alloc] init]; [myFormatter setDateFormat:@"EEEE"]; // day, like "Saturday" //[myFormatter setDateFormat:@"c"]; // day number, like 7 for saturday NSString *dayOfWeek = [myFormatter stringFromDate:nextDate]; 

问题

  NSLog(@"Today is: %@", dayOfWeek); // Prints Mondays instead of Sunday } 

我该如何解决这个问题?

尝试这个 :

  NSCalendar* calender = [NSCalendar currentCalendar]; NSDateComponents* component = [calender components:NSWeekdayCalendarUnit fromDate:[NSDate date]]; return [component weekday]; // 1 for Sunday, 2 for Monday, and so on... 

并从NSDate中查看这一天的名字? 和这个https://discussions.apple.com/thread/1700102?start=0&tstart=0

编辑

尝试这个

 NSString * time = @"2013-06-30T11:00:26+0100"; NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease]; [df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"]; NSDate *date1 = [df dateFromString:time]; long lgTime = (long)[date1 timeIntervalSince1970]; NSLog(@"%ld", lgTime); NSCalendar* calender = [NSCalendar currentCalendar]; NSDateComponents* component = [calender components:NSWeekdayCalendarUnit fromDate:date1]; NSLog(@"date=%@ === %@",[NSDate date],date1); NSLog(@"day= %d",[component weekday]); ///it return 1 
  NSCalendar* calender = [NSCalendar currentCalendar]; NSDateComponents* component = [calender components:NSWeekdayCalendarUnit fromDate:[NSDate date]]; int weekDay = [component weekday]; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; NSString *weekdayString = [[formatter weekdaySymbols] objectAtIndex:weekDay - 1]; NSLog(@"Day ::: %@", weekdayString); 
 NSDateFormatter* theDateFormatter = [[NSDateFormatter alloc] init]; [theDateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4]; [theDateFormatter setDateFormat:@"EEEE"]; NSString *weekDay = [theDateFormatter stringFromDate:[NSDate date]]; 

我已经做了一个小的NSDate类别,可以帮助您find从某个date的星期几名称。 它返回星期几名字的本地化string。 看看它。 你可以使用它,如果你想。

NKLocalizedWeekday +的NSDate

基本上,这是你需要的代码:

 NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *components = [calendar components:NSWeekdayCalendarUnit fromDate:[NSDate date]]; int weekdayNumber = [components weekday]; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; NSString *weekdayString = [[formatter weekdaySymbols] objectAtIndex:weekdayNumber - 1]; 
 mydate = [NSDate date]; NSDateFormatter *dt2 = [ [NSDateFormatter alloc] init]; [dt2 setDateFormat:@"EEEE"]; NSString *day = [[NSString alloc] initWithFormat:@"%@",[dt2 stringFromDate:mydate]]; 

你面临问题,因为它采取当地时区

尝试这个

  NSDateFormatter *dateformate = [[NSDateFormatter alloc] init] ; [dateformate setTimeZone:[NSTimeZone timeZoneWithName:@"Australia/Sydney"]]; [dateformate setDateFormat:@"EEEE"]; NSLog(@"%@", [dateformate stringFromDate:[NSDate date]]); NSLog(@"%@", [NSTimeZone knownTimeZoneNames]); 

设置你需要的时区。它可以工作和帮助你。

类似的问题在NSCalendar第一个星期链接引用它也可以帮助你。

我使用这个,它在iOS 8.4中为我工作

 -(NSString *) extractDayFromDate { NSCalendar* calender = [NSCalendar currentCalendar]; NSDateComponents* component = [calender components:NSCalendarUnitWeekday fromDate:[NSDate date]]; return [[calender weekdaySymbols] objectAtIndex:([component weekday]-1)]; }