ios今天上午12点

时间:2012-07-20 15:00:07

标签: ios nsdate nscalendar nsdatecomponents

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日......我做错了什么?

1 个答案:

答案 0 :(得分: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];

您不需要获取时间组件,然后将它们设置为零:您可以将它们保持为默认值而不是要求首先提取它们。