YosiFZ
YosiFZ

Reputation: 7900

Getting date from [NSDate date] off by a few hours

I am using

NSDate *date = [NSDate date];

for getting the date, but the date I get is off by 2 hours.

Upvotes: 19

Views: 3200

Answers (3)

jscs
jscs

Reputation: 64002

NSDate objects don't have time zones. They represent an absolute moment in time. However, when you ask one for its description (by printing it with NSLog(), e.g.), it has to pick a time zone. The most reasonable "default" choice is GMT. If you're not in GMT yourself, the date will seem to be incorrect, by the amount of your own offset.

You should always use an NSDateFormatter to create a string for display. The formatter's timezone should be set to yours, which is the default.

Upvotes: 26

Khurshid
Khurshid

Reputation: 117

-(NSDate *)getDateInCurrentSystemTimeZone
{
    NSDate* sourceDate = [NSDate date];
    NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
    NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];

    NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate];
    NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate];
    NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;

    NSDate* destinationDate = [[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate];
    return destinationDate;
}

Upvotes: 0

Florian Burel
Florian Burel

Reputation: 3456

You can get your date corrected like this:

NSDate * dateGMT = [NSDate date];
NSTimeInterval secondsFromGMT = [[NSTimeZone localTimeZone] secondsFromGMT];
NSDate * correctDate = [dateGMT dateByAddingTimeInterval:secondsFromGMT];

Upvotes: 2

Related Questions