在我的应用程序中,我需要从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
答案 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所述。 (我没有查看页面内容。)