NSDateFormatter格式问题

时间:2013-03-16 07:52:01

标签: iphone ios objective-c ios6

我正在尝试以12小时格式将NSString转换为NSDate。 (在iOS 6中)

代码:

NSString *Bdt = @"05/23/2012 08:00 AM"
NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease];
[df setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
[df setDateFormat:@"MM/dd/yyyy hh:mm a"];
NSDate *bd = [df dateFromString:Bdt];
NSLog(@"%@",bd);

输出:

  

2012-05-23 08:00:00 +0000应该是2012-05-23 08:00 AM

代码中有什么问题?

由于

2 个答案:

答案 0 :(得分:3)

如果您希望日期为2012-05-23 08:00 AM样式

将dateformatter和setDateFormat创建为yyyy-MM-dd hh:mm a

NSString *Bdt = @"05/23/2012 08:00 AM";
NSDateFormatter *df = [[NSDateFormatter alloc] init] ;
[df setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
[df setDateFormat:@"MM/dd/yyyy hh:mm a"];
NSDate *bd = [df dateFromString:Bdt];

NSDateFormatter *dateFormatter=[NSDateFormatter new];
[dateFormatter  setDateFormat:@"yyyy-MM-dd hh:mm a" ];
NSString *datestr=[dateFormatter stringFromDate:bd];
NSLog(@"%@",datestr);

*注意:我正在使用ARC,因此不会释放/自动释放对象。

编辑:

NSDate仅采用此格式:2012-05-23 08:00:00 +0000

对于任何其他格式,您需要使用NSString

答案 1 :(得分:3)

没有任何问题。您正在NSLog中打印NSDate,这与创建具有特定格式的NSString非常不同。

您似乎将内部NSDate表示与字符串格式混淆。 NSDate以不同于人类代表的方式在内部存储日期。就像NSString以一种格式存储字符串,这种格式可能不是你最终想要编码的格式,例如。 ASCII或UTF-8。当您调用NSLog时,您将收到一条诊断消息,根据- (NSString *)description- (NSString *)debugDescription返回的字符串显示日期。