2010-07-25 90 views
1

如何創建2005年8月1日的NSDate?在互聯網上找到NSDateComponent,但看起來太複雜了。NSDate問題

回答

6

另一種可能性是使用NSDateComponentsNSCalendar。例如:

NSDateComponents *comps = [[NSDateComponents alloc] init]; 
[comps setYear:2000]; 
[comps setMonth:1]; 
[comps setDay:1]; 
[comps setHour:0]; 
[comps setMinute:0]; 
[comps setSecond:0]; 

NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDate *startDate = [cal dateFromComponents:comps]; 

[cal release]; 
[comps release];  
+0

將零部件設置爲零AFAIK沒有意義。 – Chuck 2010-07-25 21:29:12

+0

那麼,如果你這樣做,它顯示了意圖:你想要的時間是明確的00:00:00,而不是「默認」。語義略有不同。 – 2010-07-25 21:47:11

+0

但我不打擾,如果默認值記錄爲0.(我沒有選中) – jtbandes 2010-07-26 00:02:36

4

什麼:

[NSDate dateWithNaturalLanguageString:@"August 1st, 2005"]; 
+0

大聲笑很搞笑。 – Fasid 2010-07-25 20:55:54

+0

@Fasid:我很認真。上面的電話會返回您要求的日期。 – zneak 2010-07-25 20:59:02

+0

有趣。自動完成沒有拿起它。我希望它不是一個私人API嗎? – Fasid 2010-07-25 21:03:23

0

它,而取決於你的時區,但在GMT,2005年8月1分鐘過了午夜1日是UNIX時間戳1122854401.所以,你可以寫...

[NSDate dateWithTimeIntervalSince1970:1122854401]; 
+0

你是如何計算的1122854401 – Fasid 2010-07-25 20:45:21

0

Introduction to Date and Time Programming Guide for Cocoa

NSDateComponents *components = [[NSDateComponents alloc] init]; 
[components setDay:1]; 
[components setMonth:8]; 
[components setYear:2005]; 
NSCalendar *gregorian = [[NSCalendar alloc] 
         initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDate *date = [gregorian dateFromComponents:components]; 
3
NSDateFormatter *myFormatter = [[NSDateFormatter alloc] init]; 
[myFormatter setDateFormat:@"M/d/yy"]; 
NSDate *myDate = [myFormatter dateFromString:@"August/01/05"]; 
0

不要錯過這樣的事實,這個日期將在8月的第2個或七月對其他地方的31號(也許一些「奇怪「,當不使用公曆時)。也許這對你而言現在並不重要。但是你應該知道這一點。 你覺得,它可能不會打你?我不太確定。例如,看看NSCalendar getting day difference wrong

問候