1
NSDate *today = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[calendar setLocale:[NSLocale currentLocale]];
[calendar setTimeZone:[NSTimeZone timeZoneWithName:@"US/Central"]];

NSDateComponents *nowComponents = [calendar components:NSYearCalendarUnit | NSWeekCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:today];

[nowComponents setHour:hour];
[nowComponents setMinute:0];
[nowComponents setSecond:0];

NSLog(@"%@", [calendar dateFromComponents:nowComponents]);

ログ2012-01-01 06:00:00 +0000。タイムゾーンの設定からすると時刻は正しいのですが、今日は7月20日です…何が悪いのでしょうか?

4

1 に答える 1

1

年、月、日のコンポーネントを抽出しNSDate、次のように新しいコンポーネントを作成する必要があります。

NSDate *today = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[calendar setLocale:[NSLocale currentLocale]];
[calendar setTimeZone:[NSTimeZone timeZoneWithName:@"US/Central"]];

NSDateComponents *nowComponents = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:today];
today = [calendar dateFromComponents:nowComponents];

時間コンポーネントを取得してからゼロに戻す必要はありません。最初にそれらを抽出するように要求しないことで、デフォルトのままにすることができます。

于 2012-07-20T15:02:53.573 に答える