0

UINotifications を使用するアプリを作成しています。コードは通知用に機能していますが、正しいタイム ゾーンを取得できません。

NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];

// Get the current date
NSDate *pickerDate = [self.datePicker date];
// Break the date up into components
NSDateComponents *dateComponents = [calendar components:( NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit | NSTimeZoneCalendarUnit)
                                               fromDate:pickerDate];
NSDateComponents *timeComponents = [calendar components:( NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit )
                                               fromDate:pickerDate];

上記のNSDateComponentsで正しく取得していると確信しています

// Set up the fire time
NSDateComponents *dateComps = [[NSDateComponents alloc] init];
[dateComps setDay:[dateComponents day]];
[dateComps setMonth:[dateComponents month]];
[dateComps setYear:[dateComponents year]];
[dateComps setHour:[timeComponents hour]];

ここで、現在の電話の場所にタイムゾーンを設定する必要があると確信しています

[dateComps setTimeZone:[dateComponents timeZone]];

[dateComps setMinute:[timeComponents minute]];
[dateComps setSecond:[timeComponents second]];
NSDate *itemDate = [calendar dateFromComponents:dateComps];

NSLog(@"%@",[NSString stringWithFormat:@"%@",itemDate]);

itemDate をログ ファイルにダンプしようとしましたが、取得した内容は GMT のように見えます

2013-11-07 00:24:14.559 IMOB[796:60b] 2013-11-07 08:23:56 +0000

ログ ファイル行の先頭にあるタイムスタンプでわかるように、正確には午前 12:24 ですが、出力は 08:23 と表示されます。

なにが問題ですか

4

1 に答える 1

1

NSDateオブジェクトは常に UTC です。NSDateFormatterロケールに従って値をログに記録するために使用します。

[NSDateFormatter localizedStringFromDate:dateStyle:timeStyle:]非常に便利です。

于 2013-11-07T17:15:31.530 に答える