HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了iOS RestKit日期解析大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
一个旧的iOS项目中,我不得不解析dd / MM / yyyy格式的日期,所以我将这些行放在AppDelegate的静态方法中,并按预期工作

// Set the Dateformatter for the Dates returned by KNowledge tt/mm/yyyy
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yyyy"];
[[RKValueTransformer DefaultValueTransformer] insertValueTransformer:dateFormatter aTindex:0];

但是在实际项目中,我的日期格式略有不同dd.Mm.yyyy,所以我使用了相同的代码行,只是切换了Date格式,但是日期没有被解析.

对于这个日期“ExamDate”:“20.06.2014”我得到(NSDate *)_examDate = 0x08f7dcd0 2014-01-01 01:00:00 CET解析后我无法理解为什么.

更新:
我用这段代码做了一个小测试:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd.Mm.yyyy"];
NSDate *date = [dateFormatter dateFromString:@"20.06.2014"];
DLog(@"Date: %@",datE);

并记录在日志中:日期:2014-06-19 22:00:00 0000

解决方法

看起来你的GMT偏移为-2:00的时区.将您的时区设置为0 GMT以正确打印.我们通常做的只是在传递日期时使用unix时间,这样我们就可以避免这种问题.

dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];

由于你的问题似乎是在RestKit的解析中,你需要使用自己的日期解析器.您可以通过安装RestKit调用Value Transformer来实现这一点,Value Transformer是映射数据时使用的.

这是你可以用来实现你想要的东西:

[RKObjectMapping alloc]; // This ensures you will actually insert at index 0!

[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,error);
      if ([inputValue isKindOfClass:[NSString class]]) {
          // We're mapping from a String to a date.
          // You can add your formatter here.
          // Below is mine for mapping from Unix Time to an NSDate.
          NSString* input = inputValue;
          *outputValue = [NSDate dateWithTimeIntervalSince1970:input.IntegerValue];
      } else if ([inputValue isKindOfClass:[NSDate class]]) {
          // We're mapping from a date to a String.
          // You can add your formatter here (if needed).
          // Below is mine for mapping from an NSDate to Unix Time.
          NSDate* input = inputValue;
          *outputValue = @([input timeIntervalSince1970]);
      }
      return YES;
  }]
 aTindex:0]; // Insert at index 0 so your formatter is always used over the default one.

或者,看起来RestKit拥有自己的NSDateFormatter类别,它增加了对将其添加为RKValueTransformer的支持.你应该可以尝试这样的事情:

[RKObjectMapping alloc]; // This ensures you will actually insert at index 0!
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd.Mm.yyyy"];
dateFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];
[RKDefaultValueTransformer insertValueTransformer:dateFormatter aTindex:0];

大佬总结

以上是大佬教程为你收集整理的iOS RestKit日期解析全部内容,希望文章能够帮你解决iOS RestKit日期解析所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。