2013-05-14 31 views
-1

這是一個非常基本的問題,我想,但我似乎無法在任何書中找到答案。如何創建NSDate,如'2013-05-11 00:00:00'

假設我有一個約會,這樣創建:

NSDate *today = [NSDate date]; 

但我想「今天」的一部分時間更改爲00:00:00' 。我怎樣才能做到這一點?

---- ----添加

我嘗試這樣做:

NSDateComponents *components = [[NSDateComponents alloc] init]; 
    [components setDay:11]; 
    [components setMonth:5]; 
    [components setYear:2013]; 
    [components setHour:0]; 
    [components setMinute:0]; 
    [components setSecond:0]; 
    NSCalendar *calendar = [NSCalendar currentCalendar]; 
    NSDate *startDate = [calendar dateFromComponents:components]; 
    NSLog(@"Current date: %@", startDate); 

但NSLog的打印出這一點:

Current date: 2013-05-11 04:00:00 +0000 

我猜這事做我的紐約時區?

- ANSWER -

以下是任何正在尋找它的人的答案。訣竅,以消除時間04:00:00是設置時區爲GMT:

[calendar setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 

- 修訂答案 -

但是你可能真的要在本地時間 - 例如,如果你需要按日期查找核心數據中的記錄,並且存儲的日期在當地時間 - 因此您可能不希望將時區設置爲GMT。

+2

NSDateFormatter你需要 – nsgulliver 2013-05-14 15:06:37

+1

我不能看到如何使用NSDateFormatter爲這......我想到的是NSDateComponents,但一直未能弄明白。 – John 2013-05-14 15:10:31

+1

可能的重複[如何獲得今天午夜NSDate對象?](http://stackoverflow.com/questions/9040319/how-can-i-get-an-nsdate-object-for-today-at -midnight)或[如何創建當前日期(或任何日期)作爲一個NSDate無小時,分鐘和秒?](http://stackoverflow.com/questions/4832536/how-do-i-create-the -current-date-or-any-date-as-an-nsdate-without-hours-minut/4832602#4832602) – 2013-05-14 15:12:02

回答

5

如果你想設置一個日期的組成部分,你想看看NSCalendar的方法來處理日期組件:

NSDate *today = [NSDate date]; 

// Get the year, month, day from the date 
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:today]; 

// Set the hour, minute, second to be zero 
components.hour = 0; 
components.minute = 0; 
components.second = 0; 

// Create the date 
NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:components]; 
+0

編輯原始問題以回答此答案...... – John 2013-05-14 15:19:21

+0

好的,所以這回答了我的問題,雖然我花了一段時間才弄清楚1)爲什麼時間像'04:00:00'出現,即使在將小時分量設置爲0,以及2)爲什麼這是一件好事。我需要這個日期做一個核心數據查詢,並且*想*我需要一個00:00:00的時間,但由於數據庫中的時間是當地時間,而不是GMT,我確實需要一個時區調整的午夜,可以這麼說。我不明白爲什麼這個問題會產生如此多的負面影響......這實際上不是一個基本的問題,以前提出的問題並沒有真正解決。不管怎樣,謝謝! – John 2013-05-14 16:10:27

+0

沒問題 - 很高興有幫助。 – Simon 2013-05-14 16:41:24

3

我想你要找的是NSDateComponents。從docs

NSDateComponents *comps = [[NSDateComponents alloc] init]; 
[comps setDay:6]; 
[comps setMonth:5]; 
[comps setYear:2004]; 
NSCalendar *gregorian = [[NSCalendar alloc] 
    initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDate *date = [gregorian dateFromComponents:comps]; 

而不是setDay:等使用setHour:。希望有所幫助。