将日期从一种格式转换为另一种格式时生成null值

时间:2011-11-16 12:02:52

标签: iphone objective-c xcode

我的日期格式为“16-11-2011”。但我想把它转换成“11月16日” 我为它编写了代码但是生成了null值而不是格式“16 Nov”

为此我写了以下代码

NSDate *checkIn = [[NSUserDefaults standardUserDefaults]valueForKey:@"CHECK_1"];
    NSLog(@"Date: %@",checkIn);

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

    [formatter setDateFormat:@"dd MMM"];
    NSString *checkInDate = [formatter stringFromDate:checkIn];
    NSLog(@"checkInDate:%@",checkInDate);

并且nslog语句显示的结果如下:

Date: 16-11-2011
checkInDate:(null)

因此我无法将其转换为我想要的格式

帮助我解决问题。

2 个答案:

答案 0 :(得分:1)

我怀疑checkInNSString而不是NSDate。 因此,您必须先将其转换为NSDate,然后将其转换回所需的字符串格式。

NSString *checkIn = [[NSUserDefaults standardUserDefaults]valueForKey:@"CHECK_1"];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd-MM-yyyy"];

NSDate *checkInTempDate = [dateFormatter dateFromString:checkIn];

[dateFormatter setDateFormat:@"dd MMM"];
NSString *checkInDate = [dateFormatter stringFromDate:checkInTempDate];

答案 1 :(得分:1)

问题出在第一行:

NSDate *checkIn = [[NSUserDefaults standardUserDefaults]valueForKey:@"CHECK_1"];

NSUserDefaults没有方法valueForKey,它是键值编码“,它返回一个值。NSUserDefaults也不处理日期。你从{{返回的是什么1}}是一个字符串,由一个quirk NSUserDefaults接受。

最后4行代码是正确的,但需要一个日期,checkIn是一个字符串。

为了测试这个,将这行代码放在第一行之后,忽略任何不兼容的类型警告):

NSDate