2012-07-20 54 views
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日...我做错了什么?ios今天获得12AM

+1

是来自“NSLog(@”%@“,今天)的日志;” ?如果是这样,它可能是关闭iPhone /模拟器的日期...(因为开始日期已经关闭) – Xval 2012-07-20 15:18:48

+0

@Xval touche。我从记忆中把它放在那里,这是离开的。它现在更新以反映真实的代码。 +1进行更正。 – Jacksonkr 2012-07-20 15:21:01

回答

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]; 

你并不需要得到时间部分,然后将它们回零:您可以通过而不是将它们保留为默认值,并首先提取它们。

+0

我**认为**使用'fromDate'使用从过去的日期起的月份和日期。毕竟,我从来没有设置一年:| – Jacksonkr 2012-07-20 15:12:47

+0

@Jackson我修改了你的代码以提供一个工作示例。 – dasblinkenlight 2012-07-20 15:20:00

+0

花了我一分钟,看看你做了什么。感谢聪明的帮助:) – Jacksonkr 2012-07-20 15:27:22