iPhone OS: How do I create an NSDate for a specific date?

IosCocoa TouchNsdateNsdateformatterNscalendar

Ios Problem Overview


Seems like a simple thing but I can't seem to find a way to do it.

It would be great to see a couple different methods.

Ios Solutions


Solution 1 - Ios

@Chuck's answer is correct, and lead me to the following code. Thought I'd share:

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

Solution 2 - Ios

You can use this

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

Hope this will help you out.

Solution 3 - Ios

If you're talking about a specific calendar date rather than a UNIXy date, you probably want NSCalendar's dateFromComponents:.

Solution 4 - Ios

#Swift Examples

Examples are often the easiest way to learn. Here are a few examples.

#Now

This one is the easiest.

let currentDateTime = Date()

#February 20, 2017

// 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)

#April 1, 1976

// 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)

#Need more details...?

There are other ways to create dates, too. If you want to learn those, as well as how to display a date, then see my fuller answer.

Solution 5 - Ios

See the documentation for NSDate. You can use the dateFromString: method of NSDateFormatter or the dateFromComponents: method of NSCalendar.

Solution 6 - Ios

I found this thread while looking for an answer to this question but then I found a good example in one my Big Nerd Ranch Objective-C Programming book. Credit to them, not me.

  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];

Solution 7 - Ios

It is ridiculous, isn't it ?

Mid-2013 and Apple still hasn't provided a simple way to set a NSDate value.

During my current iPad project, I couldn't believe I had to stop productivity for a while to write my own helper class to get the Year value from an NSDate. I mean, come on, this is basic stuff.

Anyway, here's the helper class I used in my project, to convert a string into an NSDate value :

@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

Using this code, you could set an NSDate value using something like:

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

Note: this function was based on code taken from here: https://stackoverflow.com/a/3968411/391605

My solution had been to use the following code, but I found that sometimes, it just wouldn't parse, and would return 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];

I remember it failed miserably on "Oct 12, 2012"... which is why I gave up and used the more complicated "parseDateString" function shown above.

My point is... be careful.

Some of the very-basic NSDate functions just don't work properly...

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionnickthedudeView Question on Stackoverflow
Solution 1 - IosOded Ben DovView Answer on Stackoverflow
Solution 2 - IosKamleshwarView Answer on Stackoverflow
Solution 3 - IosChuckView Answer on Stackoverflow
Solution 4 - IosSuragchView Answer on Stackoverflow
Solution 5 - IoszoulView Answer on Stackoverflow
Solution 6 - IosLev ChlumovView Answer on Stackoverflow
Solution 7 - IosMike GledhillView Answer on Stackoverflow