NSSate到NSDate不断变为空

时间:2012-01-17 10:13:31

标签: iphone objective-c ios nsstring nsdate

我知道这已被问过这么多次,但我总是在我的NSDate中得到null。我有一个像这样的字符串“2012年1月16日21:44:56”我想把它转换为“2012年1月16日09:44:56 PM”。我想在转换日期中添加PM并将24小时时间格式转换为12小时时间格式。这是我的代码。

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"MMMM dd, YYYY HH:ii:ss a"];

    NSDate *dateFromString = [[NSDate alloc] init];
    dateFromString = [dateFormatter dateFromString:dateString];

5 个答案:

答案 0 :(得分:2)

@"MMMM dd, YYYY HH:ii:ss a"此格式应与您传递给dateformatter的日期相匹配..

答案 1 :(得分:2)

格式字符串中存在错误,您还需要告诉格式化程序显示日期字符串的区域设置。

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]];
[dateFormatter setDateFormat:@"MMMM dd, yyyy HH:mm:ss a"];

NSDate *dateFromString = [dateFormatter dateFromString:dateString];
[dateFormatter release], dateFormatter = nil;

设置本地非常重要,因为您在输入中有一个日期的名称。你需要告诉NSDateFormatter这个名字是什么语言。在给出的例子中,它是英文的。我没有在没有将语言设置为英语的设备上设置本地的情况下运行代码,它将无法解析日期。

答案 2 :(得分:2)

正如Ali3n正确指出的那样,您应该首先将格式化为dateString的格式设置为获取有效的日期对象。接下来,您应该将格式化程序的格式设置为所需的格式并继续。执行以下操作:

NSString *dateString = @"January 16, 2012 21:44:56";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMMM dd, yyyy HH:mm:ss"];

NSDate *dateFromString;
dateFromString = [dateFormatter dateFromString:dateString];

[dateFormatter setDateFormat:@"MMMM dd, YYYY HH:mm:ss a"];
NSString *stringFromDate  = [dateFormatter stringFromDate:dateFromString];

答案 3 :(得分:1)

尝试以格式字符串转义文字。

[dateFormatter setDateFormat:@"MMMM dd',' YYYY HH:ii:ss a"];

答案 4 :(得分:0)

至于您的要求,您必须更改dateFormatter。请查看此link以获取更多信息。

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMMM dd, YYYY hh:mm:ss a"];
NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];
[dateFormatter release];
NSLog(@"%@",dateString);