تحويل 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 كسلسلة من الخادم وأريد استخراج الطابع الزمني Created_AT؟ هذا ما لدي حتى الآن. إنها طريقة Objective-C ، لكن هل يمكنني وضع رمز C في ملف Objective-C .M الخاص بي؟

- 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];

نصائح أخرى

إجابة كوسي قديمة قليلاً. تأكد من استخدام 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];
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top