1

仏教暦からグレゴリオ暦への日付の変換をサポートするアプリを作成しています (注: テストしているデバイスの「一般 > 国際 > カレンダー」設定は「仏教」です)。ただし、NSDateFormatter が日付を適切に解析しない理由がわかりません。これが私のコードです:

NSDate *now = [NSDate date];

NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.calendar = gregorianCalendar;
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss Z";

NSString *formattedDate = [formatter stringFromDate:now];
NSDate *boomDate = [formatter dateFromString:formattedDate];

NSLog(@"now: %@, formattedDate (as string) > %@, boomDate (as date) > %@", now, formattedDate, boomDate);

Xcode のログには次のように書かれています。

now: 2556-05-23 07:11:03 +0000, formattedDate (as string) > 2013-05-23 15:11:03 +0800, boomDate (as date) > 2556-05-23 07:11:03 +0000

(NSString) を NSDate に変換しているときにformattedDate、プロパティを適切に設定しても (特に )、NSDateFormatter が仏暦形式に従って解析するのはなぜですかformatter.calendarformattedDateグレゴリオ暦形式の NSDate として変換する必要があります。そのロジックに基づいて、 NSDateFormatter がグレゴリオ形式の日付を提供することを期待していますが、そうではありません。

基本的に、仏教徒の NSDate からグレゴリオ暦の形式に従う NSDate が必要です。

何か案は?

4

1 に答える 1

3

NSDate参照日からのオフセットを示す double 値の単なるオブジェクト ラッパーです。カレンダーやタイムゾーンに関する情報は含まれていません。それはちょうどある時点です。

私たち人間がこの時点を何と呼ぶか​​は、カレンダーとタイムゾーンによって異なります。NSDate オブジェクトは、カレンダーとタイムゾーンがなければ意味がありません。

を使用して日付オブジェクトを印刷している場合、日付オブジェクトNSLog-descriptionメソッドが呼び出され、-descriptionメソッドはデバイスのロケールを使用して文字列をフォーマットします。boomDateが仏教暦のプロパティとともに表示されるのはそのためです。あなたの仏教ロケールは仏教暦を使用しています。

nowとのboomDate変数は同じです ( を呼び出してみてください[now isEqualToDate:boomDate])。

formattedDateにグレゴリオ暦の日付が表示されるので、グレゴリオ暦への変換が成功したことがわかります。

于 2013-05-24T11:14:17.423 に答える