【问题标题】:Find difference between two timestamps - iOS查找两个时间戳之间的差异 - iOS
【发布时间】:2014-03-12 17:59:13
【问题描述】:

我正在尝试使用 NSTimeInterval 来找出我的 iOS 应用程序中两个时间戳之间的差异。但是,当我尝试传递我的时间戳时,我收到以下错误:

错误的接收器类型'double'

这是我的代码:

// Get the current date/time in timestamp format.
NSString *timestamp = [NSString stringWithFormat:@"%f", [[NSDate new] timeIntervalSince1970]];
double current = [timestamp doubleValue];

// Find difference between current timestamp and
// the timestamp returned in the JSON file.
NSTimeInterval difference = [current timeIntervalSinceDate:1296748524];

我认为 NSTimeInterval 只是 double 的另一个含义..不是吗?

请注意,'1296748524' 在这里仅用作测试。

我不明白我做错了什么。

谢谢你的时间:)

【问题讨论】:

  • 你为什么要转换成字符串来做区别?

标签: ios nsdate unix-timestamp nstimeinterval difference


【解决方案1】:

我认得那个时间戳!如果您要以字符串形式获取时间戳,然后将其转换回双精度,则可以将其作为双精度获取。

修复:

NSString *timestamp = [NSString stringWithFormat:@"%f", [[NSDate new] timeIntervalSince1970]];
double current = [timestamp doubleValue];
NSTimeInterval difference = [[NSDate dateWithTimeIntervalSince1970:current] timeIntervalSinceDate:[NSDate dateWithTimeIntervalSince1970:1296748524]];

NSLog(@"difference: %f", difference);

更好:

double currentt = [[NSDate new] timeIntervalSince1970];
NSTimeInterval differ= [[NSDate dateWithTimeIntervalSince1970:currentt] timeIntervalSinceDate:[NSDate dateWithTimeIntervalSince1970:1296748524]];
NSLog(@"differ: %f", differ);

但是您真正要做的是将日期转换为时间戳再转换为字符串再转换为时间戳再转换为日期再转换为时间戳,那么为什么不从头开始使用它并使用:

最佳:

double timeStampFromJSON = 1296748524; // or whatever from your JSON
double dif = [[NSDate date] timeIntervalSince1970] - timeStampFromJSON;
NSLog(@"dif: %f", dif);

结果都是一样的。

【讨论】:

  • 我不同意这是“最好的”。首先,“[NSDate new]”,哪个函数式的,不是主要的成语; “[NSDate date]”或“[[NSDate alloc] init]”是。其次,我相信 6 个月后你的“最佳”代码将非常难以弄清楚。
  • 我同意你的观点,并且我更新了,但我无法想象很难弄清楚。你只是得到当前日期的间隔。每个其他功能都做同样的事情,但增加了不必要的步骤。这是一段非常基本的代码,其他所有方法都有明显的冗余。
  • 也 [[NSDate alloc]init] 与 [NSDate new] 几乎相同
  • 好吧,您实际上是在硬编码该值吗?你说你认识它,所以也许它是一个参考日期,但我不认识它。如果没有 cmets 或更标准的 Objective-C,此代码对其他开发人员不友好。此外,在NSObject 上实现了“新”以调用alloc] init](意味着它完全相同),但它仍然不是标准的编码实践。我并不是说代码不起作用,但如果我正在编写代码并看到了这一点,那将是一个令人沮丧的发现。
  • 我没有硬编码它,它是问题中提供的值。我假设它对他们有一定的意义,并且我假设如果他们需要记住它,他们会给它分配一个变量。
【解决方案2】:

timeIntervalSinceDate: 期望收到NSDate。此外,它是NSDate 的实例方法。是的,返回值本质上是一个double,但它是一个使用NSDate 对象的函数。

以下是适当用法的示例:

NSDate *date1 = [NSDate ... // some way to get a valid NSDate
NSDate *date2 = [NSDate ... // some way to get a valid NSDate

NSTimeInterval elapsed = [date1 timeIntervalSinceDate:date2];

在上面的示例中,“elapsed”将包含“date1”和“date2”之间经过的秒数。如果“date1”早于“date2”,则值为负数。

【讨论】:

    猜你喜欢
    • 2017-12-21
    • 2022-12-20
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2020-05-13
    相关资源
    最近更新 更多