2010-09-19 2 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 приложения, которое получает подъязычный в виде строки с сервера и хочет извлечь временную метку created_at? Это то, что у меня есть до сих пор. Это метод Objective-C, но могу ли я поместить c-код в мой файл Objective-c .m?

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

Matt

ответ

6

Вы можете преобразовать OID строку NSDate так:

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

Это выглядит великолепно, спасибо! Я попробую. Кто-нибудь знает, как это сделать в c в моем проекте Objective-C? Это даже стоит дополнительного увеличения производительности? Наверное, нет, да? – ma11hew28

+1

Результирующая переменная должна быть длиной без знака. –

+0

Спасибо, kosii !! – ArtSabintsev

0

ответ Kossi в немного устареть. Обязательно используйте 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]; 
Смежные вопросы