2015-03-31 5 views
-1

Мне нравится знать, что представляет собой концепция NSDateFormatter. Я использовал его в своем приложении, но я немного смущен его форматом.Последний день недели с NSDateFormatter

  1. Настройки в моем тренажере:

    settings->Language & Region United States,Calendar Gregorian calendar. 
    
  2. Я использовал этот код для преобразования даты в строку:

    NSDateFormatter*defaultFormatter = [[NSDateFormatter alloc] init]; 
    [defaultFormatter setDateFormat:@"MM/dd/yyyy"]; 
    
  3. Чтобы получить дату окончания недели, я использовал этот код , Здесь date является 2015-03-31 18:30:00 +0000:

    NSDate *today =date;  
    
    //Week End Date 
    NSCalendar *gregorianEnd = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    [gregorianEnd setFirstWeekday:1]; 
    
    NSDateComponents *componentsEnd = [gregorianEnd components:NSWeekdayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:today]; 
    
    int Enddayofweek = [[[NSCalendar currentCalendar] components:NSWeekdayCalendarUnit fromDate:today] weekday];// this will give you current day of week 
    
    [componentsEnd setDay:([componentsEnd day]+(7-Enddayofweek)+1)];// for end day of the week 
    
    NSDate *EndOfWeek = [gregorianEnd dateFromComponents:componentsEnd]; 
    
    NSString* dateEndPrev = [defaultFormatter stringFromDate:EndOfWeek]; 
    
    NSDate* weekEndPrev = [defaultFormatter dateFromString:dateEndPrev] ; 
    NSLog(@"EndDate:%@",weekEndPrev); //prints ===>2015-04-04 18:30:00 +0000 
    
    return [defaultFormatter stringFromDate:weekEndPrev]; //==>04/05/2015 
    

Я не знаю, почему он посылает на следующий день с указанной даты.

ответ

0
-(void)some method 
{ 
NSDate *today = [NSDate date]; 
NSLog(@"Today date is %@",today); 
dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"yyyy-MM-dd"];// you can use your format. 

//Week End Date 
NSCalendar *gregorianEnd = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 

NSDateComponents *componentsEnd = [gregorianEnd components:NSWeekdayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:today]; 

int Enddayofweek = [[[NSCalendar currentCalendar] components:NSWeekdayCalendarUnit fromDate:today] weekday]; 
// this will give you current day of week 

[componentsEnd setDay:([componentsEnd day]+(7-Enddayofweek)+1)];// for end day of the week 

NSDate *EndOfWeek = [gregorianEnd dateFromComponents:componentsEnd]; 
NSDateFormatter *dateFormat_End = [[NSDateFormatter alloc] init]; 
[dateFormat_End setDateFormat:@"yyyy-MM-dd"]; 
dateEndPrev = [dateFormat stringFromDate:EndOfWeek]; 
weekEndPrev = [[dateFormat_End dateFromString:dateEndPrev] retain]; 
NSLog(@"%@",weekEndPrev); 
} 
0

Ваш код выглядит немного хрупким и чрезмерно сложным для меня.
Это даст вам начало последнего дня в неделю, согласно языку пользователя/календарю.

NSCalendar *cal = [NSCalendar currentCalendar]; 
NSDate *now = [NSDate date]; 
NSDate *startOfTheWeek; 
NSDate *endOfWeek; 
NSDate *startLastDayOfWeek; 
NSTimeInterval interval; 
[cal rangeOfUnit:NSCalendarUnitWeek 
     startDate:&startOfTheWeek 
     interval:&interval 
     forDate:now]; 
endOfWeek = [startOfTheWeek dateByAddingTimeInterval:interval-1]; // 23:59:59 
[cal rangeOfUnit:NSCalendarUnitDay 
     startDate:&startLastDayOfWeek 
     interval:NULL 
     forDate:endOfWeek]; 
0

Есть несколько способов, доступных для расчета последнего дня недели, один из эффективного способа получить последний день недели

NSDate * weekDate = [дата NSDate];

NSCalendar * myCalendar = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar];

NSDateComponents * currentComps = [MyCalendar компоненты :(NSYearCalendarUnit | NSMonthCalendarUnit | NSWeekOfYearCalendarUnit | NSWeekdayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit) FromDate: weekDate];

int weekOfYearVal = currentComps.weekOfYear;

[текущийComps комплектWeekday: 1];
NSDate * firstDayOfTheWeek = [myCalendar dateFromComponents: currentComps];

[текущийComps комплектWeekday: 7]; NSDate * lastDayOfTheWeek = [myCalendar dateFromComponents: currentComps];

NSDateFormatter * myDateFormatter = [[NSDateFormatter alloc] init];

myDateFormatter.dateFormat = @ "dd EEEE";

NSString * firstDayOfWeek = [myDateFormatter stringFromDate: firstDayOfTheWeek];

NSString * lastDayOfWeek = [myDateFormatter stringFromDate: lastDayOfTheWeek];

NSLog (@ «Первый день недели:% @», firstDayOfWeek);

NSLog (@ "Last Day of Week:% @", lastDayOfWeek);

Пожалуйста, дайте мне знать, если вы хотите получить дополнительную информацию.

Смежные вопросы