проблема timeIntervalSinceDate - PullRequest
       9

проблема timeIntervalSinceDate

3 голосов
/ 20 декабря 2009

в крайнем случае это так, как я не могу за всю жизнь разобраться!

Я устанавливаю дату закрытия моего приложения (используя 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]);

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

Есть идеи?!

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

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

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

Ответы [ 3 ]

10 голосов
/ 20 декабря 2009

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

2 голосов
/ 17 июля 2013

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

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

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);
}

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

Mike

www.MikesKnowledgeBase.com

0 голосов
/ 20 декабря 2009

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

double timeInterval = [timeNow timeIntervalSinceDate:timeSaved];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...