Timeintervalsounded Problem
-
20-09-2019 - |
Pergunta
Último recurso isso, como não posso para a vida de mim!
Estou definindo uma data quando meu aplicativo está fechado (usando o ApplicationWilterinate) nos padrões do usuário
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSDate *timeClosed = [[NSDate alloc] init];
[defaults setObject: timeClosed forKey:@"svdTimeClosedApp"];
Então, quando o aplicativo é lançado, eu quero comparar desta vez usando
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]);
Tentei emitir isso na janela de log esperando ver uma sequência bem formatada de cerca de 20 segundos. O problema é que está saindo como 2047868928!
Alguma ideia?!
(Saída da janela de log abaixo)
time now = 2009-12-19 20:54:02 +0000, time saved = 2009-12-19 20:48:29 +0000, time diff = 2047868928
Obrigado por qualquer ajuda!
Solução
Existem alguns problemas. Primeiro, em seu stringWithFormat:
Você deseja usar %G, não %D, %D é para valores inteiros. Além disso, você deve fazer [timeNow timeIntervalSinceDate:timeSaved]
Sua chamada atual lhe dará um valor negativo.
Outras dicas
Aqui está o código que eu uso.
No meu aplicativo, quando o usuário sincroniza alguns dados, eu gravo a data/hora atual usando este código:
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject:[NSDate date] forKey:@"LastSyncDate"];
[prefs synchronize];
Então, se eu quiser ver quantos dias tem sido desde a última vez que eles sincronizam, posso usar isso:
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);
}
Espero que isto ajude.
Mike
Eu acho que você tem o seu timeInterval
Cálculo para trás, não é? Eu acho que você quer dizer que isso inverteu.
double timeInterval = [timeNow timeIntervalSinceDate:timeSaved];