2012-07-20 42 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