2012-01-17 70 views
1

我知道这被问了很多次,但我总是最终得到null在我的NSDate。我有这样的字符串“2012年1月16日21时44分56秒”我想将它转换为“2012年1月16日09:44:56 PM”。我想在转换日期中添加一个PM,并将24小时时间格式转换为12小时时间格式。这是我的代码。NSString NSDate不断变空

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

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

当你assing一个新的'NSDate'它是从方法'dateFromString返回你并不需要分配/初始化了'NSDate',因为这将泄漏:'。只要做'NSDate * dateFromString = [dateFormatter dateFromString:dateString];' – rckoenes 2012-01-17 10:21:30

回答

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]; 
+0

谢谢你!有效。 – Diffy 2012-01-18 03:26:02

2

@"MMMM dd, YYYY HH:ii:ss a"这种格式应该匹配与YPU逝去的日期格式的日期..

1

试图逃跑格式字符串文字。

[dateFormatter setDateFormat:@"MMMM dd',' YYYY HH:ii:ss a"]; 
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这个名字将是什么语言。在给出的例子中是英文。我已经运行了你的代码,没有设置本地语言未设置为英语的设备上,它将无法解析日期。

0

至于您的要求,你必须改变dateFormatter.Check 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); 
+0

hh用于12小时时钟 – 2012-01-17 10:30:57