iPhone操作系统:如何创build特定date的NSDate?

看起来像一个简单的事情,但我似乎无法find办法做到这一点。

看到一对夫妇不同的方法真是太棒了。

@查克的答案是正确的,并带我到下面的代码。 以为我会分享:

NSDateComponents *comps = [[NSDateComponents alloc] init]; [comps setDay:10]; [comps setMonth:10]; [comps setYear:2010]; NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:comps]; 

你可以使用这个

 NSString *dateString = @"03-Sep-11"; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; dateFormatter.dateFormat = @"dd-MMM-yy"; NSDate *date = [dateFormatter dateFromString:dateString]; 

希望这会帮助你。

如果你正在谈论一个特定的日历date而不是一个UNIXydate,你可能需要NSCalendar的dateFromComponents:

请参阅NSDate的文档。 您可以使用NSDateFormatterdateFromComponents:方法或dateFromComponents:方法。

Swift 3例子

例子往往是最简单的学习方式。 这里有一些例子。

现在

这一个是最简单的。

 let currentDateTime = Date() 

2017年2月20日

 // Specify date components var dateComponents = DateComponents() dateComponents.year = 2017 dateComponents.month = 2 dateComponents.day = 20 // Create date from components let userCalendar = Calendar.current // user calendar let dateThisPostWasUpdated = userCalendar.date(from: dateComponents) 

1976年4月1日

 // Specify date components var dateComponents = DateComponents() dateComponents.year = 1976 dateComponents.month = 4 dateComponents.day = 1 // Create date from components let userCalendar = Calendar.current // user calendar let appleFoundedDate = userCalendar.date(from: dateComponents) 

需要更多的细节…?

还有其他的方法来创builddate。 如果你想学习这些,以及如何显示date,那么看看我更全面的答案 。

我发现这个线程,同时寻找这个问题的答案,但后来我发现了一个很好的例子,在我的大书呆子的Objective-C编程书。 信贷给他们,而不是我。

  NSDateComponents *myBDay =[[NSDateComponents alloc] init]; [myBDay setDay:22]; [myBDay setMonth: 04]; [myBDay setYear: 1984]; [myBDay setHour:9]; [myBDay setMinute:25]; [myBDay setSecond:35]; NSCalendar *g = [[ NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; NSDate *dateOfBirth = [g dateFromComponents:myBDay]; 

这是荒谬的,不是吗?

2013年中,苹果仍然没有提供一个简单的方法来设置一个NSDate值。

在我目前的iPad项目中,我无法相信我必须停止一段时间的生产力来编写我自己的帮手类来从NSDate获得Year值。 我的意思是,来吧,这是基本的东西。

无论如何,这是我在我的项目中使用的助手类,将string转换为NSDate值:

 @implementation DateHelper +(NSDate*)parseDateString:(NSString *)dateString { NSDateFormatter *rfc3339TimestampFormatterWithTimeZone = [[NSDateFormatter alloc] init]; [rfc3339TimestampFormatterWithTimeZone setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]]; [rfc3339TimestampFormatterWithTimeZone setDateFormat:@"MMM dd, yyyy"]; NSDate *theDate = nil; NSError *error = nil; if (![rfc3339TimestampFormatterWithTimeZone getObjectValue:&theDate forString:dateString range:nil error:&error]) { NSLog(@"Date '%@' could not be parsed: %@", dateString, error); } return theDate; } @end 

使用这个代码,你可以使用类似的方式设置一个NSDate值:

 NSDate* date = [DateHelper parseDateString:@"Jul 16, 2013"]; 

注意:这个函数是基于从这里取得的代码: https : //stackoverflow.com/a/3968411/391605

我的解决scheme使用下面的代码,但是我发现有时它只是不会parsing,并会返回nil

 // Take a date string in the format "Oct 23, 2013", and convert it into a NSDate value // THIS DOESN'T WORK ! DON'T TRUST THIS CODE !! NSDateFormatter* formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"MMM dd, yyyy"]; [formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; NSDate* date = [formatter dateFromString:dateString]; 

我记得它在“2012年10月12日”悲惨失败…这就是为什么我放弃了,并使用了上面显示的更复杂的“parseDateString”函数。

我的观点是…要小心。

一些非常基本的NSDate函数只是不能正常工作…