2010-07-25 89 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

问候