2009-12-19 4 views
3

최후의 수단이 삶의 나를 위해 그것을 할 수 없어! 응용 프로그램이 실행될 때 내 응용 프로그램이 사용자의 기본 설정에 (applicationWillTerminate를 사용)를 닫을 때timeIntervalSinceDate 문제

나는 날짜를 설정하고

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:에서 % d가 아닌 % g을 사용하고 싶습니다. % d는 정수 값입니다. 또한 [timeNow timeIntervalSinceDate:timeSaved]을 수행하면 현재 통화에서 음수 값이 부여됩니다.

+0

그것이 완료되었습니다! [time diff = 4.71526] - 올바르지 않은 stringwithformat이었습니다. 그게 다라고 믿을 수 없어! 대단히 감사합니다! –

0

나는 timeInterval 계산을 거꾸로했다고 생각합니까? 나는 당신이 그것을 반대라고 말하고 싶다고 생각합니다.

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

나는 그것을 시도 않은 결과였다 시간은 지금 시간이 = 2009-12-19 21:28 저장 2009-12-19 21시 28분 28초 0000 = : 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