use*_*905 1 macos cocoa objective-c
我正在尝试在执行ldapsearch时解析来自NSTask响应的pwdLastSet值.我已经成功提取了值(129875475241190194),我正在尝试将其转换为NSDate对象.
参考:http://www.chrisnowell.com/information_security_tools/date_converter/Windows_active_directory_date_converter.asp
我试图从上面的页面中提取Javascript代码并转换它,但我得到一个不同的日期.
int iYearsFrom1601to1970 = 1970 - 1601;
int iDaysFrom1601to1970 = iYearsFrom1601to1970 * 365;
iDaysFrom1601to1970 += (int)(iYearsFrom1601to1970 / 4); // leap years
iDaysFrom1601to1970 -= 3; // non-leap centuries (1700,1800,1900). 2000 is a leap century
float iSecondsFrom1601to1970 = iDaysFrom1601to1970 * 24 * 60 * 60;
int iTotalSecondsSince1601 = (int)(129875475241190194 / 10000000);
float iTotalSecondsSince1970 = iTotalSecondsSince1601 - iSecondsFrom1601to1970;
NSDate *date = [NSDate dateWithTimeIntervalSince1970:iTotalSecondsSince1970];
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.
谢谢!
Dav*_*ong 14
我是这样做的:
NSDateComponents *base = [[NSDateComponents alloc] init];
[base setDay:1];
[base setMonth:1];
[base setYear:1601];
[base setEra:1]; // AD
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *baseDate = [gregorian dateFromComponents:base];
[base release];
[gregorian release];
NSTimeInterval timestamp = 129875475241190194.0 / 10000000.0;
NSDate *finalDate = [baseDate dateByAddingTimeInterval:timestamp];
Run Code Online (Sandbox Code Playgroud)
这给了我finalDate的2012-07-24 03:58:22 +0000.
由于时间戳是从1601年1月1日00:00 UTC开始的时间间隔,因此您可以使用-dateByAddingTimeInterval:方法on NSDate将时间戳添加到基准日期以获得最终结果NSDate.
完成后,您可以通过它NSDateFormatter来格式化它以进行显示.