RestKit日期转换

时间:2015-07-21 04:05:51

标签: ios objective-c restkit date-conversion

RestKit将1435819788000的日期值转换为47469-04-26 14:00:00 +0000。我想问题是使用毫秒的Java日期表示与使用秒的Unix日期表示之间的区别。我想我需要设置一个转换器。我怎样才能做到这一点? (我在GitHub上看到rk变换器,但我不知道如何使用它们或在哪里找到合适的变压器。)

编辑:这是执行其余调用的代码

    NSURL *baseURL = [NSURL URLWithString:@"some url"];
    NSURLRequest *request = [NSURLRequest requestWithURL:baseURL];

    RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[Price class]];
    [mapping addAttributeMappingsFromDictionary:@{@"id": @"ron95", @"ron95": @"ron92", @"dieselNormal": @"dieselNormal", @"dieselSpecial": @"dieselSpecial", @"postDate": @"postDate"}];

    RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:mapping method:RKRequestMethodGET pathPattern:nil keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

    RKObjectRequestOperation *objectRequestOperation = [[RKObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[ responseDescriptor ]];
    [objectRequestOperation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {

    NSArray *prices = [mappingResult array];

编辑:我想我现在有效了。以下是我的工作方式。

    RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[Price class]];
    [mapping addAttributeMappingsFromDictionary:@{@"id": @"ron95", @"ron95": @"ron92", @"dieselNormal": @"dieselNormal", @"dieselSpecial": @"dieselSpecial"}];

    RKBlockValueTransformer *numberToDateValueTransformer = [RKBlockValueTransformer valueTransformerWithValidationBlock:^BOOL(__unsafe_unretained Class sourceClass, __unsafe_unretained Class destinationClass) {
        // This transformer handles `NSNumber` <-> `NSDate` transformations
        return (([sourceClass isSubclassOfClass:[NSNumber class]] && [destinationClass isSubclassOfClass:[NSDate class]]) ||
                ([sourceClass isSubclassOfClass:[NSDate class]] && [destinationClass isSubclassOfClass:[NSNumber class]]));
    } transformationBlock:^BOOL(id inputValue, __autoreleasing id *outputValue, __unsafe_unretained Class outputValueClass, NSError *__autoreleasing *error) {
        RKValueTransformerTestInputValueIsKindOfClass(inputValue, (@[ [NSNumber class], [NSDate class] ]), error);
        RKValueTransformerTestOutputValueClassIsSubclassOfClass(outputValueClass, (@[ [NSNumber class], [NSDate class] ]), error);
        if ([outputValueClass isSubclassOfClass:[NSDate class]]) {
            if ([inputValue isKindOfClass:[NSNumber class]]) {
                *outputValue = [NSDate dateWithTimeIntervalSince1970:[inputValue doubleValue] / 1000];
            }
        } else if ([outputValueClass isSubclassOfClass:[NSNumber class]]) {
            *outputValue = @([inputValue timeIntervalSince1970]);
        }
        return YES;
    }];


    RKAttributeMapping *postDateMapping = [RKAttributeMapping attributeMappingFromKeyPath:@"postDate" toKeyPath:@"postDate"];
    postDateMapping.valueTransformer = numberToDateValueTransformer;
    [mapping addPropertyMapping:postDateMapping];

0 个答案:

没有答案