web-dev-qa-db-ja.com

日、月、年からNSDateを生成する

私は、月日と年(すべて整数形式)からNSDateを生成しようとしています。

今の私の試みはそのようなものです:

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
NSNumber *day = [dataSource valueForKey:@"day"];
NSNumber *month = [dataSource valueForKey:@"month"];
NSNumber *year = [dataSource valueForKey:@"year"];
[components setDay:[day intValue]];
[components setMonth:[month intValue]];
[components setMonth:[year intValue]];
NSDate *_date = [calendar dateFromComponents:components];

ただし、_ dateは、日= 24、月= 8、年= 2011の場合、以下を出力します。

0168-07-25 04:56:02 +0000

私はひどく間違っていることをしているに違いありませんが、私には何がわかりません。誰が何が起こっているのか知っていますか?

41
minimalpop

コードにタイプミスがあります:(最後の行はsetYear:

 [components setDay:[day intValue]];
 [components setMonth:[month intValue]];
 [components setYear:[year intValue]];
40
Christopher A

重大な問題の1つは次のとおりです。

[components setMonth:[year intValue]];    //setting month with year!
3
wmorrison365

SetMonthを2回呼び出し、2回目は年の値を使用しています。する必要があります:

[components setDay:[day intValue]];
[components setMonth:[month intValue]];
[components setYear:[year intValue]];
2
Peter Rebholz

最近の誤植(2019)とは別に、キーサブスクリプションとドット表記のプロパティを使用して辞書値にアクセスするためのより便利な構文があります

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
NSNumber *day = dataSource[@"day"];
NSNumber *month = dataSource[@"month"];
NSNumber *year = dataSource[@"year"];
components.day = day.integerValue;
components.month = month.integerValue;
components.year = year.integerValue;
NSDate *_date = [calendar dateFromComponents:components];

日付コンポーネントのない別のAPIがあります

NSCalendar *calendar = [NSCalendar currentCalendar];
NSNumber *day = dataSource[@"day"];
NSNumber *month = dataSource[@"month"];
NSNumber *year = dataSource[@"year"];
NSDate *_date = [calendar dateWithEra:1 year:year.integerValue month:month.integerValue day:day.integerValue hour:0 minute:0 second:0 nanosecond:0];
0
vadian