2009-08-28 30 views
12

Tôi đang sử dụng NSDateFormatter để đặt ngày trong ứng dụng iPhone của tôi và ngày tháng hiển thị chính xác. Tuy nhiên, tôi đang tìm tất cả các ngôn ngữ (ứng dụng của tôi hỗ trợ tối đa 12 ngôn ngữ khác nhau) đang gắn bó với định dạng ngày tôi chỉ định thông qua setDateFormat. Lý tưởng nhất, tôi muốn định dạng ngày xuất hiện dưới dạng tự nhiên cho cài đặt vùng cho người dùng, thay vì theo định dạng của tôi (hoạt động tốt cho tiếng Anh nhưng có thể không tự nhiên đối với các ngôn ngữ khác).Làm thế nào để hiển thị ngày địa phương cụ thể của NSDateFormatter?

Tiếp theo là mã của tôi:

 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle]; 
    [dateFormatter setDateFormat:@"MMMM dd, yyyy kk:mm:ss"]; 

    self.creationDate.text = [dateFormatter stringFromDate:creationTimeStamp]; 

Trả lời

11

Tìm thấy giải pháp. Điều quan trọng là không gọi số setDateFormat và API trong iPhone sẽ tự động chọn thứ phù hợp để hiển thị dựa trên những gì được chỉ định trong setDateStylesetTimeStyle.

+0

Giải pháp này tốt hơn sử dụng API -localizedStringFromDate vì chuỗi được trả về bởi -localizedStringFromDate sẽ chống lại hệ số múi giờ và đôi khi đối với một số vùng ngày/giờ sẽ không liên quan. Để loại bỏ thành phần múi giờ, chúng ta cần phải làm điều này bổ sung: [dateFormatter setTimeZone: [NSTimeZone timeZoneForSecondsFromGMT: 0]]; –

31

tôi sẽ thử NSDateFormatter API sau thay vì:

+ (NSString *)localizedStringFromDate:(NSDate *)date 
       dateStyle:(NSDateFormatterStyle)dateStyle 
       timeStyle:(NSDateFormatterStyle)timeStyle; 

Giống như vậy:

self.creationDate.text = [NSDateFormatter localizedStringFromDate:creationTimeStamp 
              dateStyle:NSDateFormatterMediumStyle 
              timeStyle:NSDateFormatterShortStyle]; 

Điều đó sẽ cung cấp cho bạn kết quả bạn' đang tìm kiếm, dọn dẹp mã một chút và ngăn bạn phải quản lý một số bộ nhớ giả.

+0

Nhưng nếu tôi không muốn để định dạng với phong cách nhất định. Thay vào đó, tôi muốn hiển thị ngày như: MMM YYYY bằng tiếng Ả Rập và tiếng Anh. Bạn có thể giúp đỡ không? –

0

giải pháp khép kín với thiết kế @ fbrereto của:

static NSString *FormatDate(NSDate *date) 
{ 
    return [NSDateFormatter localizedStringFromDate:date 
             dateStyle:NSDateFormatterMediumStyle 
             timeStyle:NSDateFormatterNoStyle]; 
} 

Bây giờ bạn chỉ có thể chạy:

NSString *formattedDate = FormatDate([NSDate new]); 
+0

NSDateFormatter khá đắt tiền để tạo (xem Bekkis post: http://www.tinymission.com/post/nsdateformatter_is_expensive). Vì vậy, bạn nên sử dụng giải pháp tự chứa này chỉ khi nó được gọi là chỉ trong một vài lần. Có lẽ NSDateFormatter đã sử dụng nên được cấp phát một cách lười biếng trong một biến tĩnh. – LaborEtArs

+0

Điểm tốt, bạn cũng có thể truyền _dateFormatter vào hàm tĩnh-c từ bên trên và giữ tham chiếu đến nó từ người tiêu dùng. – Zorayr

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