2012-03-19 68 views
25

創建的NSDate我有一個NSString這樣的:@"3/15/2012 9:15 PM",我想將其轉換爲NSDate,我做了這樣的:從字符串

NSString *str [email protected]"3/15/2012 9:15 PM"; 
NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; 
[formatter setDateFormat:@"mm/dd/yyyy HH:mm"]; 
NSDate *date = [formatter dateFromString:]; 

NSLog(@"%@", date); // date = null 

你能幫我請,謝謝。

+0

的[字符串轉換爲的NSDate]可能重複(http://stackoverflow.com/questions/2311421/convert-string- to-nsdate) – 2012-03-19 18:09:04

回答

55

採用如下方案

NSString *str = @"3/15/2012 9:15 PM"; 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 

formatter.dateFormat = @"MM/dd/yyyy HH:mm a"; 

NSDate *date = [formatter dateFromString:str]; 

NSLog(@"%@", date); 

編輯: 對不起,格式應爲如下:

formatter.dateFormat = @"MM/dd/yyyy hh:mm a"; 

而顯示的時間將會我是GMT時間。所以如果你添加/減去時區,那將是下午9:15。

編輯:#2

使用如下。你也會得到確切的時間。

NSString *str = @"3/15/2012 9:15 PM"; 

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 

formatter.dateFormat = @"MM/dd/yyyy hh:mm a"; 

NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 

formatter.timeZone = gmt; 

NSDate *date = [formatter dateFromString:str]; 

NSLog(@"%@",date); 
+0

它不是一樣的結果:NSLog(@「str」)= 2012/3/13 2:00 PM NSLog(@「date」)= 2012-01-13 11:00:00 +0000 – samir 2012-03-19 11:29:26

+0

謝謝,日期是一樣的,但不是時間,我很抱歉 – samir 2012-03-19 11:37:04

+0

我已經更新了我的答案。 PL。檢查一下。 – Ilanchezhian 2012-03-19 12:13:21

0

嗯 - 你已經走了錯誤的幾個原因

  1. 的NSDateFormatter嚴格,你沒有。
  2. 您沒有提供給海峽dateFromString:
NSString* str = @"3/15/2012 9:15 PM"; 
NSDateFormatter* formatter = [[NSDateFormatter alloc]init]; 
[formatter setDateFormat:@"MM/dd/yyyy HH:mm a"]; 
NSDate* date = [formatter dateFromString:str]; 


NSLog(@"%@",date); 
+0

argh - 無法格式化....... – Damo 2012-03-19 11:24:37

+0

謝謝,但我所有的字符串都是這樣的@「mm/dd/yyyy HH:mm PM/AM」,它是一個web服務返回對我來說這個 – samir 2012-03-19 11:25:31

+0

3是真的,除非他使用ARC。 – 2012-03-19 11:25:34

0
NSString *str [email protected]"3/15/2012 9:15 PM"; 
NSDateFormatter *dateformatter = [[NSDateFormatter alloc]init]; 
    [dateformatter setDateFormat:@"MM/dd/yyyy"]; 
NSArray *firstSplit = [str componentsSeparatedByString:@" "]; 
NSDate *dateSelected = [dateformatter dateFromString:[firstSplit objectAtIndex:0]]; 

    [dateformatter setDateFormat:@"mm:ss"]; 
NSDate *dateSelected2 = [dateformatter dateFromString:[firstSplit objectAtIndex:1]]; 
NSLog(@"%@",[dateformatter stringFromDate:dateSelected2]); 

NSLog(@"%@",[dateformatter stringFromDate:dateSelected]); 
+0

謝謝,它的工作,但問題是與時間: – samir 2012-03-19 11:40:20

+0

最新問題你想要的時間 – 2012-03-19 11:41:42

+0

你也想顯示時間 – 2012-03-19 11:42:09

1

格式化程序是錯誤的。根據NSDateFormatter文檔,它應該是「MM/dd/yyyy h:mm a」。您還可能要設置的語言環境中的日期格式準則規定:

如果你有固定格式的日期的工作,你應該首先設置 語言環境的日期格式,以適合您的固定的東西格式爲 。在大多數情況下,要選擇的最佳語言環境是en_US_POSIX,這是一個 語言環境,專門設計用於產生美式英語結果 ,無論用戶和系統首選項如何。

試試這個:

NSString *str = @"3/15/2012 9:15 AM"; 
NSLocale *enUSPOSIXLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]; 
NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; 
[formatter setLocale:enUSPOSIXLocale]; 
[formatter setDateFormat:@"MM/dd/yyyy h:mm a"]; 
NSDate *date = [formatter dateFromString:str]; 

NSLog(@"%@",date); 

輸出:

2012-03-19 12:37:27.531 Untitled[6554:707] 2012-03-15 08:15:00 +0000