gpt4 book ai didi

ios - 在 Swift 中,可以使用 NSDateComponents 来帮助 NSDate 保持纳秒精度吗?

转载 作者:行者123 更新时间:2023-11-29 01:46:25 25 4
gpt4 key购买 nike

一些 Playground 代码的快照显示了我尝试以纳秒为单位调整 NSDate,然后尝试通过比较第一个 NSDate 与第二个 NSDate 来获得相同的纳秒值:

enter image description here

考虑到有关 float 和十进制不准确度的所有内容,我可以看到使用 NSTimeInterval 可能不是执行此操作的方法。

我认为另一种可能性是使用NSDateComponents。整个过程确实让我感到困惑。似乎您必须创建一个公历日历对象,然后以某种方式从 NSDate 获取纳秒,然后直接调整纳秒并将其全部返回到 NSDate再次。非常复杂!

但是由于 NSCalendar 有一种将纳秒存储为 Ints 的内置方法,我想我确实需要澄清它是否可以可靠地用于此目的。

最佳答案

要获得非常精确的时间,请使用 mach_absolute_time()。见苹果Q&A1398了解详情。

来自 SO answer 的 Swift 版本通过 Martin R

let t1 = mach_absolute_time()
let t2 = mach_absolute_time()

let elapsed = t2 - t1
var timeBaseInfo = mach_timebase_info_data_t()
mach_timebase_info(&timeBaseInfo)
let elapsedNano = elapsed * UInt64(timeBaseInfo.numer) / UInt64(timeBaseInfo.denom);
println(elapsedNano)

objective-c 版本:

#import <mach/mach_time.h>

mach_timebase_info_data_t info;
mach_timebase_info(&info);

uint64_t start = mach_absolute_time ();
uint64_t end = mach_absolute_time ();
uint64_t elapsed = end - start;

uint64_t nanos = elapsed * info.numer / info.denom;
NSLog(@"elasped: %llu nano seconds", nanos);

CGFloat seconds = (CGFloat)nanos / NSEC_PER_SEC;
NSLog(@"elasped: %0.9f seconds", seconds);

elasped: 45 nano seconds
elasped: 0.000000045 seconds

关于ios - 在 Swift 中,可以使用 NSDateComponents 来帮助 NSDate 保持纳秒精度吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31882280/

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