2009-12-19 10 views
3

последнее, что я не могу для жизни меня работать!времяIntervalSinceDate проблема

Я устанавливаю дату, когда мое приложение закрывается (с помощью applicationWillTerminate) в пользовательских дефолтов

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSDate *timeClosed = [[NSDate alloc] init]; 
[defaults setObject: timeClosed forKey:@"svdTimeClosedApp"]; 

тогда, когда приложение запускается, я хочу сравнить это время с помощью

NSDate *timeSaved = svdTimeClosedApp; 
NSDate *timeNow = [[NSDate alloc] init]; 
double timeInterval = [timeSaved timeIntervalSinceDate:timeNow]; 
NSLog(@"time now = %@, time saved = %@, time diff = %@", timeNow, timeSaved, [NSString stringWithFormat:@"%d",timeInterval]); 

I попытался вывести это в окно журнала, ожидая увидеть красиво отформатированную строку около 20 секунд. Проблема в том, что это выходит как 2047868928!

Любые идеи ?!

(выход из окна журнала ниже)

time now = 2009-12-19 20:54:02 +0000, time saved = 2009-12-19 20:48:29 +0000, time diff = 2047868928 

Спасибо за любую помощь!

ответ

10

есть пара вопросов. Во-первых, в вашем stringWithFormat: вы хотите использовать% g, а не% d,% d для целых значений. Кроме того, вы должны сделать [timeNow timeIntervalSinceDate:timeSaved], ваш текущий звонок даст вам отрицательное значение.

+0

это сделано! [time diff = 4.71526] - это была строка с форматом, которая была неправильной. Не могу поверить, что это все! Спасибо большое, ребята! –

0

Я думаю, что у вас есть ваш расчет timeInterval назад, не так ли? Я думаю, ты хочешь сказать, что это наоборот.

double timeInterval = [timeNow timeIntervalSinceDate:timeSaved]; 
+1

Я попытался, что результат был время = 2009-12-19 21:28:28 +0000, сэкономленное время = 2009-12-19 21:28 : 24 +0000, time diff = -201326592 Учитывая, что было показано 4 секунды - я бы предположил, что время diff должно быть 4. Мне интересно, нужно ли форматировать даты для строк сначала, чтобы получить часы, минуты и секунд ... –

+0

Вы когда-нибудь это выясняли? –

2

Вот код, который я использую.

В моем приложении, когда пользователь синхронизирует некоторые данные, я записать текущую дату/время, используя этот код:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
[prefs setObject:[NSDate date] forKey:@"LastSyncDate"]; 
[prefs synchronize]; 

Тогда, если я хочу, чтобы узнать, сколько дней прошло с момента их последней синхронизации, Я могу использовать это:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
NSDate* dateOfLastSync = [prefs objectForKey:@"LastSyncDate"]; 
if (dateOfLastSync != nil) 
{ 
    NSDate *timeNow = [NSDate date]; 
    double SECONDS_TO_DAY = 60 * 60 * 24; 
    int timeIntervalInDays = (int)([timeNow timeIntervalSinceDate:dateOfLastSync]/SECONDS_TO_DAY); 
    NSLog(@"The last sync was %d days ago.", timeIntervalInDays); 
} 

Надеюсь, это поможет.

Майк

www.MikesKnowledgeBase.com