0

ドキュメントを調べたところ、次のケースは機能するように見えますが、結果は常に nil です。(これは iOS SDK 6 用です)

NSString *releaseDate = @"2012-10-22T00:00:00-07:00";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSDate *date = nil;

[dateFormatter setDateFormat:@"yyyy-MM-ddTHH:mm:ss-ZZZZZ"];
date = [dateFormatter dateFromString:releaseDate];

NSLog(@"Result date: %@", date); // Logs "(null)"

洞察はありますか?

助けてくれてありがとう。

4

2 に答える 2

1

Ok。ドキュメントを少し読み直したところ、私の誤解が明らかになりました。

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSString *releaseDate = @"2012-10-22T00:00:00-07:00";
NSDate *date = nil;

[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"];
date = [dateFormatter dateFromString:releaseDate];

NSLog(@"Result date: %@", date);
NSLog(@"Result string: %@", [dateFormatter stringFromDate:date]);

「T」はアポストロフィで囲む必要があり、タイムゾーンの「ZZZZZ」はすでに「-」を占めているため、削除する必要がありました。

今では期待どおりに動作します。

于 2013-01-07T01:36:36.520 に答える
1

これを試してみてはどうでしょうか。私が推測しているように日付文字列がローカライズされていない場合、Apple でさえ、次のようなものを使用できることを示唆しています。

struct tm tmDate;
const char *formatString = "%Y-%m-%dT%H:%M:%S%z";

strptime_l(releaseDate, formatString, & tmDate, NULL);
date = [NSDate dateWithTimeIntervalSince1970: mktime(& tmDate)];

NSLog(@"Result date: %@", date);

ただし、リリース日は のように C 文字列にする必要があります。これは のメソッドconst char *releaseDate = "2012-10-22T00:00:00-07:00";からも取得できます。UTF8StringNSString

于 2013-01-06T01:06:38.777 に答える