2014-12-25 46 views
1

我創建了類別擴展名以擴展NSDateNSString以支持簡單的方法將NSDate轉換爲NSString,反之亦然。當我進行一個小測試時,日期似乎匹配,但試圖比較沒有。 這裏是我如何轉換NSDateNSString將NSDate轉換爲NSString並返回不會返回相同的日期

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"]; 
return [dateFormatter stringFromDate:self]; 

這裏是我拿回來NSDate

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"]; 
return [dateFormatter dateFromString:self]; 

這是我跑的測試:

NSDate *now = [NSDate date]; 
NSLog(@"%@", now); // 2014-12-25 21:59:45 +0000 
NSString *dateString = [now stringRepresentation]; 
NSLog(@"%@", dateString); // 2014-12-25T23:59:45+0200 
NSDate *converted = [dateString dateRepresentation]; 
NSLog(@"%@", converted); // 2014-12-25 21:59:45 +0000 
BOOL result1 = [now isEqualToDate:converted]; // false 
BOOL result2 = [now compare:converted] == NSOrderedSame; // false 
NSComparisonResult result3 = [now compare:converted]; // NSOrderedDescending 

回答

2

的問題是你轉換失去亞秒精度。

創建[NSDate now]時,子秒信息保存在NSDate對象中。然後,將其轉換爲不保留該信息的字符串,並在轉換回之後它就消失了。

作爲文檔isEqualToDate:狀態:

這種方法檢測的日期之間的子第二差異。如果您想比較不太精細的日期,請使用timeIntervalSinceDate:比較兩個日期。

這同樣適用於compare

這種方法檢測的日期之間的子第二差異。如果您想比較不太精細的日期,請使用timeIntervalSinceDate:比較兩個日期。

至少有三種可能的解決方案:

  • 使用timeIntervalSinceDate:比較忽略子秒

  • 使用字符串表示,是能夠保持亞秒

  • 滾動你自己的比較方法,將比較你喜歡的準確性 - 提到的類別是最好的地方添加噸帽子。

+0

就是這樣,謝謝!我創建了自己的比較方法,並按預期工作。 – imas145

相關問題