Конвертировать MongoDB BSON ObjectId (oid) в сгенерированное время в Objective-C? - PullRequest
3 голосов
/ 19 сентября 2010

Я нашел это:

функция: 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 в виде строки с сервера и хочет извлечь метку времени созданного_атата? Это то, что я до сих пор. Это метод Objective-C, но могу ли я поместить код c в мой файл Objective-c .m?

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

Мэтт

Ответы [ 2 ]

6 голосов
/ 29 сентября 2010

Вы можете преобразовать строку oid в NSDate следующим образом:

NSString *asd = @"4c8f695bdaf9856dbe000008";
long result;
BOOL success = [[NSScanner scannerWithString:[asd substringToIndex:8]] scanHexLongLong:&result];
NSDate *date = [[NSDate alloc] initWithTimeIntervalSince1970:result];
0 голосов
/ 14 июля 2016

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