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

谢谢你的帮助!

4

3 回答 3

10

有几个问题。首先,在您stringWithFormat:想使用 %g 而不是 %d 时,%d 用于整数值。此外,你应该做[timeNow timeIntervalSinceDate:timeSaved]你当前的电话会给你一个负值。

于 2009-12-19T21:26:44.863 回答
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

于 2013-07-17T10:02:48.133 回答
0

我认为你的timeInterval计算倒退了,不是吗?我想你想说它颠倒了。

double timeInterval = [timeNow timeIntervalSinceDate:timeSaved];
于 2009-12-19T21:13:13.737 回答