NSSate到NSDate多次调用时不起作用

时间:2013-02-22 00:17:07

标签: objective-c cocoa xcode4.6

我在课堂上写了这个函数:

- (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

除了程序停止之外没有任何错误。

2 个答案:

答案 0 :(得分:0)

我已经尝试过你的代码并且对我来说工作非常好(使用ARC),可能你的问题是在“MyClass”的其他地方...... BTW!你为什么不在NSDate上制作一个“类别”?

这样的事情:

NSDate + ConvertDate.h

@interface NSDate (ConvertDate)

+(NSDate *) convertDateFromString : (NSString *)dateString;

@end

NSDate + ConvertDate.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”方法,因为你正在使用类方法。'

答案 1 :(得分:0)

可能是

NSString * dateStr2 = @“22-12-1977”;

NSDate认为22月为???也许尝试12-22-1977而不是?我通常使用NSDateFormatter转换为字符串或日期..