看起来你的时区是GMT偏移量为-2:00。将你的时区设置为0 GMT以正确打印时间。通常我们只是在传递日期时使用Unix时间戳,这样就可以避免此类问题。
dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]
由于你的问题似乎出现在 RestKit 的解析过程中,所以需要使用自己的日期解析器。你可以通过安装 RestKit 调用的值转换器来实现这一点,它是在映射数据时使用的。
以下是一个可以用来实现你想要的功能的样例:
[RKObjectMapping alloc];
[RKValueTransformer.defaultValueTransformer
insertValueTransformer:
[RKBlockValueTransformer
valueTransformerWithValidationBlock:^BOOL(__unsafe_unretained Class inputValueClass, __unsafe_unretained Class outputValueClass) {
return (([inputValueClass isSubclassOfClass:[NSDate class]] && [outputValueClass isSubclassOfClass:[NSString class]]) ||
([inputValueClass isSubclassOfClass:[NSString class]] && [outputValueClass isSubclassOfClass:[NSDate class]]));
}
transformationBlock:^BOOL(id inputValue, __autoreleasing id *outputValue, __unsafe_unretained Class outputClass, NSError *__autoreleasing *error) {
RKValueTransformerTestInputValueIsKindOfClass(inputValue, (@[ [NSString class], [NSDate class] ]), error);
RKValueTransformerTestOutputValueClassIsSubclassOfClass(outputClass, (@[ [NSString class], [NSDate class] ]), error);
if ([inputValue isKindOfClass:[NSString class]]) {
NSString* input = inputValue;
*outputValue = [NSDate dateWithTimeIntervalSince1970:input.integerValue];
} else if ([inputValue isKindOfClass:[NSDate class]]) {
NSDate* input = inputValue;
*outputValue = @([input timeIntervalSince1970]);
}
return YES;
}]
atIndex:0];
另外,看起来RestKit有自己的NSDateFormatter类别,可以支持将其添加为RKValueTransformer。您可以尝试以下操作:
[RKObjectMapping alloc];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd.MM.yyyy"];
dateFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];
[RKDefaultValueTransformer insertValueTransformer:dateFormatter atIndex:0];
RKValueTransformerTest...
宏调用,看看是否有效。 - Sandy Chapman