从iOS sdk中获取date
在我的应用程序中,想从date开始(即Sunday
, Monday
等)。
我的代码如下:
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)]; }