目标c-NSString到NSDate在多次调用时不起作用



我在一个类中编写了这个函数:

- (NSDate *) convertDate : (NSString *) dateStr{
  NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
  [dateFormatter setDateFormat:@"dd-MM-yyyy"];
  [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
  NSDate *dateFrmStr = [[NSDate alloc] init];
  dateFrmStr = [dateFormatter dateFromString:dateStr];
  return dateFrmStr;
}

我在另一个类中调用这个函数,如下所示:

NSString * dateStr1 =@"01-01-1977";
NSString * dateStr2 =@"22-12-1977";
NSString * dateStr3 =@"19-01-1978";
MyClass *data = [[MyClass alloc]init];
NSDate *dateObj1 = [data convertDate:dateStr1];
NSDate *dateObj2 = [data convertDate:dateStr2];
NSDate *dateObj3 = [data convertDate:dateStr3];
NSLog(@" >>> dateObj1 %@",dateObj1);
NSLog(@" >>> dateObj2 %@",dateObj2);
NSLog(@" >>> dateObj3 %@",dateObj3);

当我运行这个时,唯一的第一个日期似乎被转换了,因为我得到的输出是:

>>> dateObj1 1977-01-01 00:00:00 +0000

没有任何错误,只是程序停止了。

我试过你的代码,对我来说工作得很好(使用ARC),可能你的问题在"MyClass"中的其他地方…顺便提一下为什么不在NSDate上创建一个"类别"?

类似这样的东西:

NSDate+ConvertDate.h

@interface NSDate (ConvertDate)
+(NSDate *) convertDateFromString : (NSString *)dateString;
@end

NSDate+转换器日期.m

@implementation NSDate (ConvertDate)
+(NSDate *)convertDateFromString:(NSString *)dateString{

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd-MM-yyyy"];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
    return [dateFormatter dateFromString:dateString];
}
@end

是的,它看起来像您的代码,唯一的区别是您不需要分配"MyClass"的实例来使用"convertDateFromString"方法,因为您使用的是类方法

可能是吗

NSString*dateStr2=@"22-12-1977";

NSDate认为22是一个月???也许试试1977年12月22日??我通常使用NSDateFormatter来转换为字符串或日期。。

最新更新