How can I create an NSDate
from the day, month and year? There don\'t seem to be any methods to do this and they have removed the class method dateWithString<
A slightly different answer to those already posted; if you have a fixed string format you'd like to use to create dates then you can use something like:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.locale = [NSLocale localeWithIdentifier:@"en_US_POSIX"];
// see QA1480; NSDateFormatter otherwise reserves the right slightly to
// modify any date string passed to it, according to user settings, per
// it's other use, for UI work
dateFormatter.dateFormat = @"dd MMM yyyy";
// or whatever you want; per the unicode standards
NSDate *dateFromString = [dateFormatter dateFromString:stringContainingDate];
You can use NSDateComponents:
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:6];
[comps setMonth:5];
[comps setYear:2004];
NSCalendar *gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDate *date = [gregorian dateFromComponents:comps];
[comps release];
You could write a category for this. I did that, this is how the code looks:
// NSDateCategory.h
#import <Foundation/Foundation.h>
@interface NSDate (MBDateCat)
+ (NSDate *)dateWithYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day;
@end
// NSDateCategory.m
#import "NSDateCategory.h"
@implementation NSDate (MBDateCat)
+ (NSDate *)dateWithYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day {
NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
[components setYear:year];
[components setMonth:month];
[components setDay:day];
return [calendar dateFromComponents:components];
}
@end
Use it like this: NSDate *aDate = [NSDate dateWithYear:2010 month:5 day:12];