還有另一種方法。它可以給結果比accepted answer
我比較他們略有不同(更多或更少)。我得到的區別-7秒OSX 10.9.3和+2秒的iOS 7.1.1
據我瞭解這種方式給出相同的結果,如果掛鐘改變,但接受的答案給出,如果掛鐘改變不同的結果?
下面的代碼:
static CFAbsoluteTime getKernelTaskStartTime(void) {
enum { MICROSECONDS_IN_SEC = 1000 * 1000 };
struct kinfo_proc info;
bzero(&info, sizeof(info));
// Initialize mib, which tells sysctl the info we want, in this case
// we're looking for information about a specific process ID = 0.
int mib[] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, 0};
// Call sysctl.
size_t size = sizeof(info);
const int sysctlResult = sysctl(mib, COUNT_ARRAY_ELEMS(mib), &info, &size, NULL, 0);
assert(0 != sysctlResult);
const struct timeval * timeVal = &(info.kp_proc.p_starttime);
NSTimeInterval result = -kCFAbsoluteTimeIntervalSince1970;
result += timeVal->tv_sec;
result += timeVal->tv_usec/(double)MICROSECONDS_IN_SEC;
return result;
}
你已經接受了一個答案,但正如@ hotpaw2指出的那樣,'NSDate'是一個掛鐘時間戳,而諸如夏時制和NTP更新之類的更改可能導致兩個連續時刻實時顯示錯誤順序, 'NSDate's(或'time_t's或任何其他掛鐘時間戳。) –
@JonathanGrynspan確實問題沒有得到解決,我的滿意。看起來Apple雖然已經改變了CoreLocation和CoreMotion之間的格式,但顯然還未嘗試改進,但它完全沒有生成穩健的時間戳。由於NSDate測量GMT,夏時制至少不應有所作爲。因爲接收電話對於實時操作而言不好,所以我的應用程序會要求飛行模式「最佳性能」。這也會阻止NTP。 – Potatoswatter
你想達到什麼目的?您對精確時間戳有什麼具體需求?蘋果公司的時間戳幾乎與其他系統一樣,只是使用不同的類型名稱。 –