2010-09-19 48 views
3

我发现这一点:将MongoDB BSON ObjectId(oid)转换为Objective-C中的生成时间?

功能:http://github.com/timburks/NuMongoDB/blob/master/src/bson.c#L128 字节:http://github.com/timburks/NuMongoDB/blob/master/src/platform_hacks.h#L55 结构:http://github.com/timburks/NuMongoDB/blob/master/src/bson.h#L70

但究竟如何我会用这个对我的iPhone应用程序,获取OID作为字符串从服务器和希望提取created_at时间戳?这是我迄今为止所拥有的。这是一个Objective-C方法,但是我可以将c代码放在我的Objective-c .m文件中吗?

- timeFromBsonOid:(NSString *)oid { 
    time_t out; 
    memcpy(&out, oid, 4); 
    return out; 
} 

马特

回答

6

您可以转换的OID字符串的NSDate这样的:

NSString *asd = @"4c8f695bdaf9856dbe000008"; 
long result; 
BOOL success = [[NSScanner scannerWithString:[asd substringToIndex:8]] scanHexLongLong:&result]; 
NSDate *date = [[NSDate alloc] initWithTimeIntervalSince1970:result]; 
+0

这看起来不错,谢谢!我会尝试一下。任何人都知道在我的Objective-C项目中如何在c中执行此操作?这甚至值得额外的性能收益吗?可能不会吧? – ma11hew28 2010-09-30 00:45:23

+1

结果变量应该是一个无符号long long。 – 2012-01-30 05:07:43

+0

谢谢,kosii !! – ArtSabintsev 2012-05-24 15:37:17

0

科西的回答有点过时了。确保使用unsigned long long,否则您可能会注意到32位和64位设备上的奇怪行为和崩溃。

NSString *asd = @"4c8f695bdaf9856dbe000008"; 
unsigned long long result; 
BOOL success = [[NSScanner scannerWithString:[asd substringToIndex:8]] scanHexLongLong:&result]; 
NSDate *date = [[NSDate alloc] initWithTimeIntervalSince1970:result]; 
相关问题