gpt4 book ai didi

ios - 使用 NSDateComponents 转换后 NSDate 比较结果不是 NSOrderedSame

转载 作者:行者123 更新时间:2023-11-28 21:31:54 25 4
gpt4 key购买 nike

为了将日期值传递给 C++ 库,我需要从 NSDate 中提取年、月、日等。我使用 NSDateComponents,并将再次从 C++ 库中使用 NSDateComponents 重建 NSDate。但我注意到,往返比较总是失败,即使我记录的 NSDate 看起来完全一样。这是一个简单的单元测试:

- (void) testCalender {
NSDate *timestamp = [NSDate date];
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear |NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond fromDate:timestamp];
NSLog(@"%@", components);
//Calendar Year: 2016
//Month: 2
//Leap month: no
//Day: 26
//Hour: 10
//Minute: 48
//Second: 36
NSDate *result = [[NSCalendar currentCalendar] dateFromComponents:components];

NSLog(@"%@", timestamp); // 2016-02-26 15:48:36 +0000
NSLog(@"%@", result); // 2016-02-26 15:48:36 +0000

XCTAssertEqual([timestamp compare:result], NSOrderedSame); // Failed
}

我错过了什么?

最佳答案

发生这种情况是因为 NSDate 在内部使用亚秒精度。当您查询 [NSDate date] 时,您会得到一个可能包含非零纳秒部分的日期。但是当你重新创建它时,你会错过那部分并且它们之间的差异很小。所以你还需要处理 NSCalendarUnitNanosecond

关于ios - 使用 NSDateComponents 转换后 NSDate 比较结果不是 NSOrderedSame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35656287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com