2011-01-13 12 views
3

ユーザーがグレゴリオ暦をiPhoneのデフォルトカレンダーとして使用していないときは、NSDateFormatterを使用して問題が発生しています。 2011-01-13(木)に等しくなりグレゴリオ暦dateAndLocStringを使用してデバイスに NSDateFormatterと日本語カレンダー

NSString *testString = @"2011-01-14"; 
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"yyyy-MM-dd"]; 
NSDate *eventDate = [dateFormat dateFromString:testString]; 
[dateFormat setDateFormat:@"yyyy-MM-dd(EEE)"]; 
NSString *dateAndLocString = [dateFormat stringFromDate:eventDate]; 
[dateFormat release]; 

しかし、ユーザは2011-01-13に等しくなる日本語カレンダーdateAndLocStringを使用している場合(水)これは間違っています。

誰かが私が間違って何をしているのかも知りませんか?

答えて

4

誰かがより良い提案をしている場合は、私にこれを正しく動作させる方法を見つけました。次のコード行を使用して、NSDateFormatterで優先ユーザーローカルを設定する必要があります。

[dateFormat setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:[[NSLocale preferredLanguages] objectAtIndex:0]] autorelease]]; 

これは、NSDateFormatterに正しいユーザーロケールを提供します。一部の人々は

[dateFormat setLocale:[NSLocale currentLocale]]; 

を使用するように誘惑されるかもしれません。しかし、これは、ユーザーの言語が日本語に設定されている場合でも、日本のカレンダー= @日本のカレンダー返しはen_USで、システムに[NSLocale currentLocale]として動作しません。

グレゴリオ暦以外のカレンダーでNSDateFormatterが自動的に動作しない理由はわかりません。