0

NSStringからNSDateを返すメソッドを作成しました。コードは以下のとおりです。関数「2011年2月25日」に送信します。関数は「2010-12-2608: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
  */  
}
4

3 に答える 3

2

セパレータを使用して日付を渡していますが、日付フォーマッタのセパレータとして/指定しました。-文字列の解放に関するご質問については、所有しているオブジェクト、つまりnewalloccopy、またはで作成したオブジェクトのみを解放する必要があります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
于 2011-06-25T23:34:04.427 に答える
1

フォーマットをに設定します@"MM-dd-YYYY"が、渡す文字列の形式は@"1/1/1970"です。それは一致しません。データフォーマットガイド:日付フォーマッタを参照してください。


// how do I release dateFromString?

自動リリースあり。

return [dateFromString autorelease];

メモリ管理を参照してください。

于 2011-06-25T22:55:47.410 に答える
1

私が抱えていた問題は、形式に YEAR の CAP LETTERS があったことでした。

正解です:

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

そして、これは間違っています: 大文字 YYYY に注意してください

[formatter
setDateFormat:@"MM-dd-YYYY"];
于 2011-06-26T03:42:36.530 に答える