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

时间:2015-08-07 16:12:09

标签: ios swift nsdate floating-accuracy nsdatecomponents

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

enter image description here

考虑到有关浮点数和十进制不准确性的所有内容,我可以看到使用NSTimeInterval可能不是这样做的方法。

我认为另一种可能性是使用NSDateComponents。但整个过程对我来说真的很困惑。看起来您必须创建一个格里高利日历对象,然后以某种方式从NSDate获取纳秒,然后直接调整纳秒,并将其全部重新置于NSDate。很复杂!

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

1 个答案:

答案 0 :(得分:1)

对于非常精确的时间,请使用#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); 。有关详细信息,请参阅Apple this answer

来自Q&A1398 SO answer

的快速版本
public void goToPage3(){
    Intent intent = new Intent(Page2.this , Page3.class);
    startActivity(intent);

}
public void goToPage5(){
    Intent intent = new Intent(Page2.this , Page5.class);
    startActivity(intent);

}// and so on up to page20

Objective-C版本:

public class MenuDetails{

public Intent createIntent(Context from, Class to){
    return new Intent(from,to);
 //Context from is unknown
}
  

elasped:45纳秒   elasped:0.000000045秒