2017-03-16 90 views
1

如何将DAAppearance时间从磁盘仲裁转换为有效的时间戳?将DAAppearanceTime转换为日期

我试过如下:

511348742.912949

1986年3月16日09:

if let appearanceTime = diskinfo["DAAppearanceTime"] as? NSNumber{ 
          print(appearanceTime) 
          let date = NSDate(timeIntervalSince1970: TimeInterval(appearanceTime)) 
          print(date)        
         } 

我得到正确的DAAppearanceTime回从功能,但转换后的错误年:19:02 +0000

+0

您正在获取时间戳“511348742.912949”的正确日期,您可以在此处进行确认http://www.onlineconversion.com/unix_time.htm –

+0

这意味着DiskArbitration提供了错误的数字吗?时间是正确的,但我的USB记忆棒自1986年以来没有连接 – nja

回答

1

"DAAppearanceTime"密钥没有正式记录,但DiskArbitration框架是开源的。

DAInternal.c:

const CFStringRef kDADiskDescriptionAppearanceTimeKey = CFSTR("DAAppearanceTime" ); 

DADisk.c:

/* 
* Create the disk description -- appearance time. 
*/ 

time = CFAbsoluteTimeGetCurrent(); 

object = CFNumberCreate(allocator, kCFNumberDoubleType, &time); 
if (object == NULL) goto DADiskCreateFromIOMediaErr; 

CFDictionarySetValue(disk->_description, kDADiskDescriptionAppearanceTimeKey, object); 
CFRelease(object); 

使密钥的值是什么CFAbsoluteTimeGetCurrent()回报,那就是

绝对时间是在相对于秒计绝对参考日期为2001年1月1日00:00:00 GMT。

你将它转换为Date这样的:

if let time = diskinfo["DAAppearanceTime"] as? Double { 
    let date = Date(timeIntervalSinceReferenceDate: time) 
    print(date) 
} 

对于价值511348742.912949这导致 日期2017-03-16 09:19:02 +0000