2012-03-19 34 views
25

Tôi có một NSString như thế này: @"3/15/2012 9:15 PM" và tôi muốn chuyển nó sang NSDate, tôi đã làm như thế này:tạo NSDate từ một chuỗi

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 

bạn có thể giúp tôi xin vui lòng, cảm ơn.

+0

thể trùng lặp của [chuyển đổi chuỗi để nsdate] (http://stackoverflow.com/questions/2311421/convert-string- to-nsdate) –

Trả lời

55

Sử dụng các giải pháp sau đây

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); 

Edit: Xin lỗi, định dạng nên thực hiện như sau:

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

Và thời gian hiển thị wil l là giờ GMT. Vì vậy, nếu bạn cộng/trừ múi giờ, nó sẽ là 9:15 PM.

Edit: # 2

Sử dụng như dưới đây. Bạn sẽ nhận được thời gian chính xác quá.

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

không phải là kết quả tương tự: NSLog (@ "str") = 3/13/2012 2:00 PM NSLog (@ "date") = 2012-01-13 11:00:00 +0000 – samir

+0

Cảm ơn, ngày tháng giống nhau nhưng không phải lúc, tôi xin lỗi – samir

+0

Tôi đã cập nhật câu trả lời của mình. Pl. kiểm tra xem. – Ilanchezhian

0

Hmmm - bạn đã đi sai cho một vài lý do

  1. các NSDateFormatter là nghiêm ngặt và bạn chưa từng.
  2. bạn đã không cung cấp str để 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 - không thể nhận được định dạng ....... – Damo

+0

Cảm ơn, nhưng tất cả các chuỗi của tôi đều như thế này @ "mm/dd/yyyy HH: mm PM/AM", đó là một dịch vụ web quay trở lại với tôi điều này – samir

+0

3 là đúng, trừ khi anh ấy sử dụng ARC. –

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

Cảm ơn, nó hoạt động nhưng vấn đề là với thời gian: – samir

+0

bạn muốn thời gian nào là vấn đề –

+0

do u muốn hiển thị thời gian cũng –

1

formatter của bạn là sai. Theo tài liệu NSDateFormatter, nó phải là "MM/dd/yyyy h: mm a". Bạn cũng có thể muốn thiết lập miền địa phương như đã nêu trong Hướng dẫn ngày Định dạng:

Nếu bạn đang làm việc với các ngày cố định định dạng, đầu tiên bạn nên thiết lập các locale của định dạng ngày để một cái gì đó phù hợp với cố định của bạn Định dạng . Trong hầu hết các trường hợp, miền địa phương tốt nhất để chọn là en_US_POSIX, một ngôn ngữ được thiết kế đặc biệt để mang lại kết quả tiếng Anh Mỹ bất kể tùy chọn của người dùng và hệ thống.

Hãy thử điều này:

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); 

Đầu ra:

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