1

タイムゾーンを適切に管理する方法がわかりません。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年を生成する必要があることは明らかであるため、何かが欠けているに違いありません。

4

1 に答える 1

3

形式記号「YYYY」は使用しないでください。代わりに「yyyy」を使用してください。

「YYYY」は週の年です。これはあなたが望むものではありません!

NSString を NSDateに変換すると、場合によっては 1 年追加される

于 2013-01-07T03:46:08.107 に答える