2013-03-16 60 views
-2

我试图将NSString以12小时的格式转换为NSDate。 (在IOS 6)NSDateFormatter格式问题

代码:

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 8时00分○○秒0000应该是2012-05-23 08:00 AM

代码有什么问题?

感谢

+0

这里没有错。如果你NSLog一个NSDate(即调用'description'),你将得到'2012-05-23 08:00:00 + 0000'。 – 2013-03-16 07:56:14

+0

你正在上午08:00上午 – 2013-03-16 07:56:34

+0

@MatthiasBauch:是的,但它应该是'2012-05-23 08:00 AM' – user1859900 2013-03-16 07:56:53

回答

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

+0

请仔细阅读我的问题...我已经提到过我已经尝试过... – user1859900 2013-03-16 07:59:00

+0

@ user1859900:现在检查代码 – 2013-03-16 08:02:08

+0

@MatthiasBauch:当然有'NSLog' – user1859900 2013-03-16 08:02:15

3

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

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

+0

是的我只是想念那部分感谢:) – user1859900 2013-03-16 09:32:10