jmoneystl
jmoneystl

Reputation: 781

Date Formatting is Weird

I have a date string that looks like this:

1391640679661

When I use this code:

NSString *seconds = @"1391640679661";
NSDate *date = [NSDate dateWithTimeIntervalSince1970:[seconds doubleValue]];

I end up with this:

46069-05-03 07:27:41 +0000

So what's happening here? Is this a particular date format that I'm not accounting for? Or am I doing something else wrong?

Upvotes: 1

Views: 90

Answers (2)

bhavya kothari
bhavya kothari

Reputation: 7474

Apple's own api will do all the hard work for you to format components as per your need.
If you want to get individual components as well you can apply below approach.

NSTimeInterval theTimeInterval = 1391640679661;

// Get the system calendar
 NSCalendar *sysCalendar = [NSCalendar currentCalendar];

// Create the NSDates
NSDate *date1 = [[NSDate alloc] init];
NSDate *date2 = [[NSDate alloc] initWithTimeInterval:theTimeInterval sinceDate:date1]; 

// Get conversion to months, days, hours, minutes
unsigned int unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit;

NSDateComponents *conversionInfo = [sysCalendar components:unitFlags fromDate:date1  toDate:date2  options:0];

NSLog(@"Conversion: %dmin %dhours %ddays %dmoths",[conversionInfo minute], [conversionInfo hour], [conversionInfo day], [conversionInfo month]);

Upvotes: 2

Felipe
Felipe

Reputation: 266

To convert a timestamp string into NSDate, you need to divid the timestamp double value to 1000, and then call dateWithTimeIntervalSince1970:

NSString *timestamp = @"1391640679661";
double seconds = [timestamp doubleValue]/1000.0;
NSDate *date = [NSDate dateWithTimeIntervalSince1970:seconds];

The result is:

2014-02-05 22:51:19 +0000

Upvotes: 1

Related Questions