我正在尝试以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
代码中有什么问题?
由于
答案 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
返回的字符串显示日期。