2013-03-16 63 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