NSDateFormatter действительно возвращает то, что ожидается - PullRequest
0 голосов
/ 26 июня 2011

Я создал метод для возврата NSDate из строки NSString. Код ниже. Отправляю на функцию "25.02.2011". Функция возвращает «2010-12-26 08:00:00 +0000»

Что я сделал не так? Также NSString мне нужно выпустить в конце. Как мне это сделать?

спасибо!

-(NSDate *) GetDatefromString:(NSString *) Str
{

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

    [formatter setDateFormat:@"MM-dd-YYYY"];

    NSDate *dateFromString;
            // = [[NSDate alloc] init]; tried taking this part out but still not working


    if (Str != NULL)
    {
        dateFromString = [formatter dateFromString:Str];

    }
    else
    {
        dateFromString = [formatter dateFromString:@"1/1/1970"];
    }

    [formatter release];

     return dateFromString;    

// how do I release dateFromString?

  /*  
    Printing description of dateFromString:
    2010-12-26 08:00:00 +0000
    Printing description of Str:
    02-25-2011
  */  
}

Ответы [ 3 ]

2 голосов
/ 26 июня 2011

Вы передаете дату, используя разделитель /, но вы указали - в качестве разделителя для вашего устройства форматирования даты.Что касается вашего вопроса об освобождении строки, вы должны освобождать только те объекты, которыми вы владеете, то есть созданные с помощью new, alloc, copy или mutableCopy.Смотрите примеры ниже.

NSDateFormatter* formatter = [[NSDateFormatter alloc] init]; // needs releasing
[formatter setDateFormat:@"MM-dd-yyyy"];

NSString* str1 = @"06/25/2011"; // does not need releasing
NSString* str2 = [[NSString alloc] initWithString:@"06-25-2011"]; // needs releasing

NSDate* date1 =  [formatter dateFromString:str1]; // does not need releasing
NSDate* date2 =  [[NSDate alloc] init]; // needs releasing
date2 = [formatter dateFromString:str2]; 

NSLog(@"date from %@ : %@", str1, date1);
NSLog(@"date from %@ : %@", str2, date2);

// release the objects you own
[formatter release];
[str2 release];
[date2 release];

// prints out
date from 06/25/2011 : (null)
date from 06-25-2011 : 2011-06-25 00:00:00 -0700
1 голос
/ 26 июня 2011

Проблема, с которой я столкнулся, заключалась в том, что в ГОДУ использовались ПИСЬМА CAP для ГОДА.

Это правильно:

 [formatter setDateFormat:@"MM/dd/yyyy"];

И это неправильно: ЗАМЕТЬТЕ КРЫШКИ YYYY

[formatter
setDateFormat:@"MM-dd-YYYY"];
1 голос
/ 26 июня 2011

вы устанавливаете формат на @"MM-dd-YYYY", но передаваемая вами строка имеет вид @"1/1/1970". Это не соответствует. см. Руководство по форматированию данных: форматеры даты .


// how do I release dateFromString?

С авто-выпуском .

return [dateFromString autorelease];

См. Управление памятью .

...