Преобразовать Mongodb BSON ObjectID (OID) для сгенерированного времени в Objective-C?

StackOverflow https://stackoverflow.com/questions/3746835

Вопрос

Я нашел это:

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

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

Матовый

Это было полезно?

Решение

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

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

Другие советы

Ответ Kossi немного устарел. Убедитесь, что вместо этого нужно использовать без знаки, если в противном случае вы можете заметить странное поведение и сбои на 32-битных и 64-битных устройствах.

NSString *asd = @"4c8f695bdaf9856dbe000008";
unsigned long long result;
BOOL success = [[NSScanner scannerWithString:[asd substringToIndex:8]] scanHexLongLong:&result];
NSDate *date = [[NSDate alloc] initWithTimeIntervalSince1970:result];
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top