时间间隔计算问题

3
这是最后的办法,因为我无论如何都无法解决它!
我正在使用用户默认设置,在我的应用程序关闭时(使用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

有几个问题需要注意。首先,在您的stringWithFormat:中,您要使用%g而不是%d,%d用于整数值。另外,您应该执行[timeNow timeIntervalSinceDate:timeSaved],否则您当前的调用会给出负值。


太好了![时间差 = 4.71526] - 原来是stringwithformat那个地方不正确。真不敢相信就是这个问题!非常感谢大家! - Matt Facer

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

希望这能帮到您。
Mike www.MikesKnowledgeBase.com

0

我认为你的timeInterval计算是反过来的,不是吗?我想你想要说反过来。

double timeInterval = [timeNow timeIntervalSinceDate:timeSaved];

1
我尝试过了,结果是现在时间 = 2009-12-19 21:28:28 +0000,保存的时间 = 2009-12-19 21:28:24 +0000,时间差 = -201326592考虑到显示了4秒钟,我认为时间差应该是4。我在想是否需要先将日期格式化为字符串以获取小时、分钟和秒数... - Matt Facer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接