タイムゾーンを適切に管理する方法がわかりません。UI にデバイスのタイムゾーンを使用し、UTC+0000 で日付オブジェクトを生成する UIDatepicker など、さまざまなメソッドから生成される日付オブジェクトがあります。
また、日付オブジェクトから 4 桁の年だけを抽出しようとしていますが、予期しない結果が得られます。問題は、タイムゾーンを日付フォーマッタに適用する必要があることだと思いましたが、それは役に立たなかったようです。これが私のコードです:
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
NSTimeZone *currentTimeZone = [NSTimeZone localTimeZone];
[dateFormat setTimeZone:currentTimeZone];
[dateFormat setDateFormat:@"YYYY"];
NSLog(@"About to use self.displayedDate: %@",self.displayedDate);
NSString *gregorianYear = [dateFormat stringFromDate:self.displayedDate];
NSLog(@"Calculated Gregorian year: %@ from date %@",gregorianYear,self.displayedDate);
私は現在CSTにいます。これを実行すると、次の出力が得られます。
2013-01-06 21:22:47.168 293 Calendar[4835:907] About to use self.displayedDate: 2012-12-31 03:22:26 +0000
2013-01-06 21:22:47.171 293 Calendar[4835:907] Calculated Gregorian year: 2013 from date 2012-12-31 03:22:26 +0000
私のアプリの日付は、もともと現在の日付/時刻から設定されています。次に、日付専用に構成された UIDatePicker コントロールを使用して、日付を 2012 年 12 月 30 日に設定します (これが UIDatePicker コントロールに表示されます)。datepicker からの戻り値は、上記の出力を生成したコードに直接挿入されます。2013年ではなく2012年を生成する必要があることは明らかであるため、何かが欠けているに違いありません。