Ios iPhone OS:如何为特定日期创建NSDate?
看起来很简单,但我似乎找不到一个方法来做Ios iPhone OS:如何为特定日期创建NSDate?,ios,cocoa-touch,nsdate,nsdateformatter,nscalendar,Ios,Cocoa Touch,Nsdate,Nsdateformatter,Nscalendar,看起来很简单,但我似乎找不到一个方法来做 如果能看到两种不同的方法,那就太好了。有关详细信息,请参阅文档。您可以使用NSDateFormatter的方法或NSCalendar的方法。如果您谈论的是特定的日历日期而不是UNIXy日期,您可能需要NSCalendar的datefrom组件:
如果能看到两种不同的方法,那就太好了。有关详细信息,请参阅文档。您可以使用
NSDateFormatter
的方法或NSCalendar
的方法。如果您谈论的是特定的日历日期而不是UNIXy日期,您可能需要NSCalendar的datefrom组件:
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];
希望这能帮到你。这太荒谬了,不是吗 2013年年中,苹果仍然没有提供一种简单的方法来设置NSDate值 在我当前的iPad项目中,我简直不敢相信我不得不暂停工作一段时间,编写自己的helper类,从NSDate中获取年份值。我是说,拜托,这是基本的东西 无论如何,下面是我在项目中使用的帮助器类,用于将字符串转换为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"];
注意:此函数基于以下代码:
我的解决方案是使用下面的代码,但我发现有时候,它无法解析,并且会返回nil
我记得它在“2012年10月12日”惨败。。。这就是为什么我放弃使用上面显示的更复杂的“parseDateString”函数的原因
我的观点是。。。小心点
一些非常基本的NSDate函数不能正常工作…我在寻找这个问题的答案时发现了这个线程,但后来我在我的一本Big Nerd Ranch 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];
迅速的例子
举例通常是最简单的学习方法。这里有几个例子
现在
这是最简单的
let currentDateTime = Date()
2017年2月20日
1976年4月1日
需要更多的细节吗。。。?
还有其他方法可以创建日期。如果您想了解这些,以及如何显示日期,那么。我一直得到这个日期:“1969-12-31 16:00:00”-0800当使用stringNSDateFormatter*dateFormatter=[[NSDateFormatter alloc]init]中的日期时;NSDate*capturedStartDate=[DateFormatterDateFromString:@“2001年1月2日”];NSLog(@“%@,[capturedStartDate说明]);输出:2010-04-05 10:49:47.688 Calendar2[21339:207]1969-12-31 16:00:00-0800您可能需要在格式化的日期上设置一些参数,而不是普通的
init
?注意还有setHour
、setMinute
、setSecond
,以获得更精细的粒度。请小心使用“dateFromString”函数-我发现如果有一些完全有效的日期,它会失败得很惨。有关解析日期字符串的另一种方法,请参见我下面的帖子。Oded Ben提到的方法也是另一种最好的方法。。。。。NSDateComponents*comps=[[NSDateComponents alloc]init];[薪酬设定日:10];[薪酬设定月:10];[公司设置年份:2010年];NSDate*date=[[NSCalendar currentCalendar]dateFromComponents:comps];
let currentDateTime = Date()
// 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)
// 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)