2011-08-16 21 views
8

Tôi hỏi một cơ sở dữ liệu cho ngày của một đối tượng. Tôi lấy lại một chuỗi như vậy: 2011-08-16T19:03:21.000Z (Đây là một chuỗi khác: 2011-08-12T02:13:16.000Z);Lấy ngày từ chuỗi '2011-08-16T19: 03: 21.000Z'

Edit: Đây là một số khác mà tôi đã thực hiện 16 tháng tám năm 2011, lúc 12:51 AM for mục đích thử nghiệm: 2011-08-16T19:51:24.000Z

Tôi muốn chuyển đổi ngày này sang định dạng khác cho mục đích hiển thị. Định dạng này có thể thay đổi trong tương lai, vì vậy tôi không muốn thực hiện thao tác chuỗi trực tiếp. Điều tốt nhất cần làm là biến nó thành một NSDate, và sau đó quay lại chuỗi được định dạng đúng. Tuy nhiên, tôi không thể, cho cuộc sống của tôi, nhận được chuỗi darn vào một NSDate.

- (NSString *)makeDateStringReadable:(NSString *)dateString { 
    NSLog(@"The String: %@", dateString); 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateFormat:@"yyyy-MM-ddTHH:mm:ss.zzzz"]; 
    NSDate *theDate = [formatter dateFromString:dateString]; 
    NSLog(@"The Date: %@", theDate); 
    [formatter setDateFormat:@"yyyy-MM-dd"]; 
    NSString *finalString = [formatter stringFromDate:theDate]; 
    [formatter release]; 
    return finalString; 
} 

Chuỗi gốc được chuyển vào và đăng xuất nhưng nhật ký "Ngày:" luôn hiển thị không có giá trị. Tôi giả sử định dạng không chính xác ... nhưng tôi không thể làm cho nó đúng. Tôi đã thử sử dụng this làm tài liệu tham khảo.

Tôi có thể nhận được sự trợ giúp của chuyên gia DateFormatter không? Cảm ơn bạn rất nhiều!

+0

Bạn có thể tìm thấy triển khai hoạt động tại đây: http://devbytom.blogspot.fr/2011/04/rfc-3339-dates-and-ios-parsing.html – Martin

+0

Định dạng hoạt động: '[formatter setDateFormat: @ "yyyy -MM-dd'T'HH: mm: ss.SSS'Z '"];' Được sao chép từ bên dưới nhận xét. –

Trả lời

12

Một vấn đề (nhưng có thể không phải vấn đề) là rằng zzzz không phải là đặc tả phù hợp cho 000Z. Sự kết thúc của dấu thời gian RFC 3339 không phải là đặc điểm múi giờ bốn ký tự, mà là số thập phân cộng với chữ "Z" theo nghĩa đen. Vì vậy, hãy thử thay đổi zzzz thành SSS'Z'.

+0

Cảm ơn bạn đã phản hồi nhanh chóng. Tôi đã thử "[formatter setDateFormat: @" yyyy-MM-ddTHH: mm: ss.SSS'Z '"];", nhưng nó vẫn là null. –

+6

Sau khi chơi xung quanh với nó một số chi tiết (và có một người bạn giúp đỡ), tôi đã nhận nó làm việc với: '[formatter setDateFormat: @ "yyyy-MM-dd'T'HH: mm: ss.SSS'Z'"]; ' Cảm ơn bạn! –

+2

NSDateFormatter là một trong những thứ chậm nhất mà tôi không gặp phải trên iOS (và Mac). Họ thực sự đắt tiền để thực hiện. Hãy ghi nhớ điều đó nếu bạn đang tạo ra 10.000 trong số đó. Bạn có thể tạo một cái, sau đó giữ nó để thực hiện toàn bộ chương trình. (Một singleton). –

Các vấn đề liên quan