0

私はクラスでこの関数を書きました:

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

エラーは何もありませんが、プログラムは停止します。

4

2 に答える 2

0

私はあなたがコードであることを試してみましたが、私にとっては非常にうまく機能します(ARCで)。おそらく、問題は「MyClass」のどこかにあるのでしょう...ところで! 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

はい、コードのように見えます。唯一の違いは、クラス メソッドを使用しているため、「convertDateFromString」メソッドを使用するために「MyClass」のインスタンスを割り当てる必要がないことです。

于 2013-02-22T00:41:26.273 に答える
0

それは可能性が

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

その NSDate は 22 を月と見なしますか??? 代わりに12-22-1977を試してみてください?? 私は通常 NSDateFormatter を使用して文字列または日付に変換します..

于 2013-02-22T01:52:15.890 に答える