NSDate возвращает 5 часов 30 мтс дополнительно

я использую [дата NSDate], чтобы получить текущую дату, но она возвращает 5 часов 30 мтс вперед. он возвращается в разное время до вечера и после вечера. Мое требование: я хочу удалить данные в кеше через 1 час.

В настоящее время я использую следующий код для расчета разницы во времени. //storyDate - это та, которая хранится в кеше...

NSTimeInterval timeGapInSeconds =fabs([[NSDate date] timeIntervalSinceDate:storyDate]); 
NSInteger daysGap= timeGapInSeconds/86400;
NSInteger hoursGap = timeGapInSeconds/3600;
NSInteger mtsGap = timeGapInSeconds/60;

NSLog(@"days gap %lu, hours gap is %lu",(long)daysGap,(long)hoursGap);
NSLog(@"time gap in seconds %f",timeGapInSeconds);
 NSLog(@"time gap in mins %f",timeGapInSeconds/60);
NSLog(@"current date:%@",[NSDate date]);

person user2823044    schedule 25.03.2014    source источник
comment
Это связано с тем, что ваш местный часовой пояс отличается от GMT, который используется при NSLog дате.   -  person Volker    schedule 25.03.2014
comment
И не используйте константы типа 86400 для календарных вычислений (есть дни с 23 или 25 часами - подумайте о летнем времени!). Используйте NSCalendar, NSDateComponents,...   -  person Martin R    schedule 25.03.2014
comment
Это потому что ты в Индии.   -  person Hot Licks    schedule 25.03.2014


Ответы (1)


Вы можете добавить это к своему dateFormatter, если хотите обобщить:

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setLocale:[NSLocale currentLocale]];

Или, если вы делаете какое-либо приложение для конкретной страны, используйте это:

NSLocale *usLoc = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[dateFormatter setLocale:usLoc];

Надеюсь, это сработает.

person Gaurav Govilkar    schedule 25.03.2014