2015-05-20 2 views
-1

В настоящее время я сохраняю даты в NSArray, так как мне нужно загрузить список дат в пользовательском раскрывающемся списке, но не могу это сделать, потому что следующей проблемы.Формат NSDate для этого формата в NSString: - 15 января 2013

Вот код, как я пытаюсь форматировать NSDate: -

NSCalendar *currentCalendar = [NSCalendar currentCalendar]; 
    NSDate *today = [NSDate date]; 

    NSInteger dc = [currentCalendar ordinalityOfUnit:NSDayCalendarUnit 
               inUnit:NSYearCalendarUnit 
               forDate:today]; 

    datesArray = [[NSMutableArray alloc]init]; 
    for (int index = 1; index <= dc; index++) 
    { 


    NSDateComponents *components = [[NSDateComponents alloc] init]; 
      [components setDay:index]; 
    NSCalendar *gregorian = [[NSCalendar alloc] 
            initWithCalendarIdentifier:NSGregorianCalendar]; 
      NSDate *date = [gregorian dateFromComponents:components];// Year is coming "0000" --log is: "0000-12-31 18:06:32 +0000" 
      NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; 
      [formatter setDateFormat:@"MMMM dd yyyy"]; //updated 
      NSString *articleDateString = [formatter stringFromDate:date]; // getting- Jan 01 0001 
      [datesArray addObject: pickerItemTitle]; 
    } 

Но я не получаю желаемый результат, как «15 2013 январь»

Также в NSDate я получаю что-то вроде этого «0000-12-31 18:06:32 +0000», может кто-нибудь сказать мне, почему год приходит «0000»

+0

Что входит 'date'? – Larme

+0

Можете ли вы попробовать 4M как [formatter setDateFormat: @ "MMMM dd YYYY"]; – ondermerol

+0

@ Larme Это журнал даты: - 0000-12-31 18:06:32 +0000 – Vizllx

ответ

2

Проблема с кодом является то, что ваш являются инициализацией NSDateComponents с 1-й день, и так как вы не обеспечивают в любом году, это занимает год как «1». Чтобы ваш код работал правильно, вы можете установить год текущей даты как год NSDateComponents.

NSCalendar *currentCalendar = [NSCalendar currentCalendar]; 
NSDate *today = [NSDate date]; 

NSInteger dc = [currentCalendar ordinalityOfUnit:NSCalendarUnitDay 
              inUnit:NSCalendarUnitYear 
              forDate:today]; 

NSMutableArray *datesArray = [[NSMutableArray alloc]init]; 
for (int index = 1; index <= dc; index++) 
{ 

    //Using dateComponents for setting year 
    NSDateComponents *dateComponents = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]]; 
    NSInteger year = [dateComponents year]; 

    NSDateComponents *components = [[NSDateComponents alloc] init]; 
    [components setDay:index]; 

    [components setYear:year];//Setting year of components 

    NSCalendar *gregorian = [[NSCalendar alloc] 
          initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 
    NSDate *date = [gregorian dateFromComponents:components];// Year is coming "0000" --log is: "0000-12-31 18:06:32 +0000" 
    NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; 
    [formatter setDateFormat:@"MMMM dd yyyy"]; //updated 
    NSString *articleDateString = [formatter stringFromDate:date]; // getting- Jan 01 0001 
    [datesArray addObject: pickerItemTitle]; 
    NSLog(@"%@", articleDateString); 
} 
+1

Я только что видел это, но вы уже ответили, ваше решение работает. – ondermerol

+0

Наконец-то кто-то понял, в чем была моя проблема. Спасибо User31. – Vizllx

0

Заменить дату в формате строки с этой строки:

[formatter setDateFormat:@"MMMM dd YYYY"]; 
-1

Пожалуйста, проверьте код

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; 
dateFormatter.dateFormat = @"MMMM dd yyyy"; 
NSDate *yourDate = [dateFormatter dateFromString:@"January 15 2013"]; 
2

Вы не устанавливаете месяц и год объекта NSDateComponents:

[components setMonth:month]; 
[components setYear:year]; 

(см. Пример NSDateComponents class reference).

Кроме того, ваша строка форматирования неверна. Вам необходимо:

  • MMMM для полного имени месяца.
  • yyyy за год.

Итак:

[formatter setDateFormat:@"MMMM dd yyyy"]; 

Here is the reference следовать.

+0

Спасибо, но я все еще не получаю год. просто обновил вопрос. проверить. – Vizllx

+0

@Vizllx Потому что вы все еще используете 'YYYY' вместо' yyyy'. См. Ссылку, которую я опубликовал в своем ответе. – trojanfoe

+0

Протестировано, не работает! Но когда NSDate возвращается так: «0000-12-31 18:06:32 +0000», как я могу получить год, он наступает «0000» – Vizllx

0
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"yyyy-MM-dd"]; 

NSDateFormatter *timeFormat = [[NSDateFormatter alloc] init]; 
[timeFormat setDateFormat:@"HH:mm:ss"]; 

NSDate *now = [[NSDate alloc] init]; 

NSString *theDate = [dateFormat stringFromDate:now]; 
NSString *theTime = [timeFormat stringFromDate:now]; 

NSLog(@"\n" 
     "theDate: |%@| \n" 
     "theTime: |%@| \n" 
     , theDate, theTime); 

[dateFormat release]; 
[timeFormat release]; 
[now release]; 

Также обратите внимание на этот Date and Time это поможет вам много

0

User31 уже ответил на мой вопрос, и он работает.

Между тем после того, как какой-то исследовании я решил эту проблему с помощью следующего процесса и добавил альтернативный способ приближения: -

datesArray = [[NSMutableArray alloc]init]; 


    NSDateComponents *comps = [[NSDateComponents alloc] init]; 
    [comps setDay:1]; 
    [comps setMonth:1]; 
    [comps setYear:1900]; 
    NSDate *minDate = [[NSCalendar currentCalendar] dateFromComponents:comps]; 

    NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar]; 
    NSDateComponents *days = [[NSDateComponents alloc] init]; 
    NSInteger dayCount = 0; 
    while (TRUE) { 

     [days setDay: ++dayCount]; 
     NSDate *date = [gregorianCalendar dateByAddingComponents: days toDate: minDate options: 0]; 
     if ([date compare: [NSDate date]] == NSOrderedDescending) 
     { 
      [self removeLoader]; 
      break; 
     } 
     //NSString *articleDateString = [formatter stringFromDate:date]; 

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

     [df setDateFormat:@"dd"]; 
     NSString *dd = [df stringFromDate:date]; 

     [df setDateFormat:@"MMMM"]; 
     NSString *mm = [df stringFromDate:date]; 

     [df setDateFormat:@"yyyy"]; 
     NSString *yy = [df stringFromDate:date]; 


     NSString *pickerItemTitle = [NSString stringWithFormat: @"%@  %@  %@", mm,dd,yy]; 
     [datesArray addObject: pickerItemTitle]; 

    }