从Parse.com使用createdAt日期时的NSDate准确性

时间:2015-06-30 11:34:39

标签: ios objective-c nsdate

在我的应用程序中,我需要从Parse.com后端获取某些对象的日期。例如,解析日期为:2015-06-30T10:37:23.642Z。

我会用:

self.mostRecentMessageDate = object.createdAt;

其中mostRecentMessageDate是NSDate对象。但是,当我使用NSLog检查日期时,我得到2015-06-30 10:37:23 +0000。它似乎已经失去了毫秒的精度。这是因为NSLog显示日期的方式还是我需要对NSDate对象做些什么来使它更精确?

对此的任何指示都会很棒,谢谢!

注:

我需要这样做,因为当我查询我使用的对象时

[receivedMessagesQuery whereKey:@"createdAt" greaterThan:self.mostRecentMessageDate]; I want to make sure it isn't missing messages by ignoring the milliseconds part

2 个答案:

答案 0 :(得分:2)

是否丢失毫秒取决于Parse.com传输日期的方式(我没有使用Parse.com的经验)。

NSDate省略打印时的毫秒数。如果您依赖此精度的计算,则可以使用timeIntervalSince…方法获得更精确的值,例如timeIntervalSince1970。这些方法返回NSTimeInterval double; documentation表示此类型"在10,000年的范围内产生亚毫秒精度" ,对于大多数用途而言应该足够精确。

NSDate比较方法确实需要几毫秒的时间。你可以轻松地测试一下:

NSDate *d1 = [NSDate date];
NSDate *d2 = [NSDate date];
NSLog(@"%@ ?= %@ -- %d (%f, %f)", d1, d2, [d1 compare:d2], [d1 timeIntervalSince1970], [d2 timeIntervalSince1970]);

// Output:
// 2015-06-30 11:48:55 +0000 ?= 2015-06-30 11:48:55 +0000 -- -1 (1435664935.405415, 1435664935.405424)
// Note the "-1" here; if they were equal, it would be "0" instead.

答案 1 :(得分:2)

除了DarkDust的回答,你应该考虑更广泛的内容。

  • 日期类似于从起始点开始经过的时间。它们表示为浮点数。根据平等比较浮点数并不是一个好主意。

  • NSDate实例的精度取决于很多事情。正如DarkDust所提到的,你不知道解析提供了什么。即使在Cocoa中,您也可以获得- initWithTimeIntervalSince1970:-initWithTimeIntervalFromReferenceDate:的不同精度。为了使事情变得更复杂,如果存储和重读日期,则无法预测其精度是否发生变化。 (I. e.Core Data会降低精确度。)

做ε检查,我。即正如here所述。 (我没有查看页面内容。)