cfi*_*her 3 cocoa equality objective-c nsdate
我正在使用Stig Brautaset的JSON库(http://code.google.com/p/json-framework),我需要序列化一个NSDate.我正在考虑在JSONifying之前将其转换为字符串,但是,我遇到了这种奇怪的行为:
为什么这些NSDates不被认为是平等的?
NSDate *d = [[NSDate alloc] init];
NSDate *dd = [NSDate dateWithString:[d description]];
NSLog(@"%@", d);
NSLog(@"%@", dd);
if( [d isEqualToDate:dd] ){
NSLog(@"Yay!");
}
Run Code Online (Sandbox Code Playgroud)
Bol*_*ock 13
当您描述原始日期对象时,您将失去原始对象的某些亚秒级精度 - 换句话说,-description
刮掉小数秒,然后返回
国际格式的接收器的字符串表示
YYYY-MM-DD HH:MM:SS ±HHMM
,其中±HHMM
表示从GMT开始的小时和分钟的时区偏移
当您根据描述创建新的日期对象时,您可以在整秒内获得它,因为该字符串仅精确到一秒.因此,-isEqualToDate:
返回NO
是因为两个日期对象之间存在一小段时间的差异,这对它很敏感.
此方法检测日期之间的亚秒差异.如果要比较细粒度较小的日期,请使用
timeIntervalSinceDate:
比较两个日期.
所以你会做这样的事情(NSTimeInterval
以秒为单位):
if ([d timeIntervalSinceDate:dd] == 0) {
NSLog(@"Yay!");
}
Run Code Online (Sandbox Code Playgroud)