timeIntervalSinceDate问题

时间:2009-12-19 21:08:09

标签: iphone cocoa-touch datetime date-comparison

最后,因为我不能为我的生活而努力!

我在用户默认设置中关闭我的应用程序(使用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 个答案:

答案 0 :(得分:10)

有几个问题。首先,在stringWithFormat:中,您要使用%g,而不是%d,%d用于整数值。此外,您应该[timeNow timeIntervalSinceDate:timeSaved]当前通话会给您带来负值。

答案 1 :(得分: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

答案 2 :(得分:0)

我认为你向后计算timeInterval,不是吗?我想你想说它逆转了。

double timeInterval = [timeNow timeIntervalSinceDate:timeSaved];