4

で奇妙な問題に遭遇しましたUIDatePicker。他のタイム ゾーンに基づいてリマインダーを設定できるアプリを作成しようとしています。すなわち。ニューヨークの午後 4 時にリマインドして。

を使用する場合UIDatePickerNSDate返されるオブジェクトは常に、電話機のタイム ゾーンで選択された時刻であり、UTC に変換されます。タイムゾーンまたはカレンダーのプロパティが別のタイムゾーンに設定されていることを考慮していません。

これは栄光のすべての私のコードです!

NSLog(@"Date: %@", [datePicker date]);
NSLog(@"DatePicker TimeZone: %@", [datePicker timeZone]);
NSLog(@"Calendar TimeZone: %@", [datePicker.calendar timeZone]);

NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"America/New_York"];

NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[cal setTimeZone:timeZone];
NSLog(@"New Calendar TimeZone: %@", [cal timeZone]);

NSLog(@"Updating timezones");
[datePicker setTimeZone:timeZone];
[datePicker setCalendar:cal];


NSLog(@"Date: %@", [datePicker date]);
NSLog(@"DatePicker TimeZone: %@", [datePicker timeZone]);
NSLog(@"Calendar TimeZone: %@", [datePicker.calendar timeZone]);

そして出力は...

2012-11-09 14:13:04.834 DatePickerTest[4524:c07] Date: 2012-11-09 03:12:59 +0000
2012-11-09 14:13:04.835 DatePickerTest[4524:c07] DatePicker TimeZone: (null)
2012-11-09 14:13:04.837 DatePickerTest[4524:c07] Calendar TimeZone: Australia/Sydney (GMT+11:00) offset 39600 (Daylight)
2012-11-09 14:13:04.837 DatePickerTest[4524:c07] New Calendar TimeZone: America/New_York (EST) offset -18000
2012-11-09 14:13:04.837 DatePickerTest[4524:c07] Updating timezones
2012-11-09 14:13:04.882 DatePickerTest[4524:c07] Date: 2012-11-09 03:12:59 +0000
2012-11-09 14:13:04.882 DatePickerTest[4524:c07] DatePicker TimeZone: America/New_York (EST) offset -18000
2012-11-09 14:13:04.883 DatePickerTest[4524:c07] Calendar TimeZone: America/New_York (EST) offset -18000

返されたのは最初の行で正しいです。NSDateこれはシドニーの 14:12 の UTC 時間ですが、タイム ゾーンとカレンダーを変更した後でも、返された日付は、シドニーの 14:13 ではなく、シドニーの 14:12 に基づいています。ニューヨーク。

4

1 に答える 1