Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios iPhone OS:如何为特定日期创建NSDate?_Ios_Cocoa Touch_Nsdate_Nsdateformatter_Nscalendar - Fatal编程技术网

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)