来自NSString的NSDate给出null结果

时间:2011-12-06 07:54:48

标签: iphone objective-c ios nsdate nsdateformatter

我正在使用以下代码生成NSDate -> NSString

+(NSString *)getCurrentTime
{
    NSDate *now = [NSDate date];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd-MM-yyyy hh:MM:SS a"];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
    NSString* str =[dateFormatter stringFromDate:now];
    [dateFormatter release];
    NSLog(@"%@",str);
    return str;
}

上面的代码一切都很好。我使用上面的代码在数据库中存储字符串。现在,在检索该字符串时,我会NULL。以下是我以特定格式检索日期的代码

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"hh:MM:SS a"];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
    NSDate *dt =[dateFormatter dateFromString:crdInfo.swipeTime];
    NSLog(@"Date : %@",dt);
    [dateFormatter release];

我应该如何检索或存储特定格式?我的crdInfo.swipeTime正在检索String属性...

3 个答案:

答案 0 :(得分:3)

首先,为什么不直接存储NSDate对象或纪元时间戳?这将为您提供更大的灵活性。

现在问题,我怀疑这是由于您配置了NSDateFormatter,您将其保存为一种格式并尝试使用其他格式将其转换为日期。使格式相同,然后重试。如果要以不同于存储的方式显示它,则可能需要使用存储的格式将其转换为NSDate,然后再使用另一个日期格式化程序以您希望它作为字符串的格式获取它。

答案 1 :(得分:0)

尝试将其格式化为dd-MM-yyyy hh:mm:ss a。

你写了dd-MM-yyyy hh:MM:SS a MM hh:MM:SS中的{{1}}给出的月份是以这种格式无法识别的,并且没有必要在几秒内写出超级SS

希望你明白。

答案 2 :(得分:0)

正如Narayana建议您需要使用与存储的格式相同的格式检索日期。检索如下: -

    NSDateFormatter *reDateFormatter = [[NSDateFormatter alloc] init];
    [reDateFormatter setDateFormat:@"dd-MM-yyyy hh:MM:SS a"];
    [reDateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
    NSDate *dt = [reDateFormatter dateFromString:str];
    NSLog(@"The Date : %@",dt);

    [reDateFormatter setDateFormat:@"hh:MM:SS a"];
    NSString *currentTime = [reDateFormatter stringFromDate:dt];
    NSLog(@"%@",currentTime);

希望它对你有所帮助。