2011-12-07 11 views
6

Tôi hiện đang trải qua quá trình toàn cầu hóa cho một dự án (một ứng dụng .net mvc2) và toàn cầu hóa là một chút mới đối với tôi. Tôi đã nhận thấy rằng DateTime.ToString(), khi được định dạng cho một số nền văn hóa, có thể gây ra một ArgumentOutOfRangeException cho các giá trị quá xa trong quá khứ hoặc tương lai. Đặc biệt, các lịch được sử dụng cho "ar" và "ar-SA" (UmAlQuraCalendar) có các ngày được hỗ trợ tối thiểu và tối đa rất hạn chế. Khi sử dụng UmAlQuraCalendar, bất kỳ ngày nào trước tháng 4 năm 1930 hoặc sau tháng 5 năm 2029 sẽ gây ra điều này. Điều này có thể dễ dàng quan sát được:Thực tiễn nào tốt nhất khi xử lý phạm vi giới hạn các giá trị DateTime được hỗ trợ của văn hóa?

DateTime.ParseExact("1900", "yyyy", CultureInfo.InvariantCulture).ToString("G", new CultureInfo("ar")); 

Tha thứ sự thiếu hiểu biết của tôi về chủ đề này, nhưng tôi tự hỏi thực tiễn tốt nhất ở đây là gì. Tôi muốn nó nếu tôi có thể đại diện cho các ngày sớm hơn năm 1930 mà không cần phải thêm xử lý ngoại lệ mỗi khi tôi in một ngày, nhưng tôi cũng muốn tôn trọng văn hóa của người dùng. Có phải lựa chọn tốt nhất ở đây để chuyển lịch cho các nền văn hóa này? Có vẻ như từ một số googling rằng các tùy chọn cung cấp HijriCalendar là rất tương tự như UmAlQuraCalendar, nhưng với nhiều ngày thoải mái tối thiểu và tối đa được hỗ trợ. Đây có phải là vấn đề mà rất nhiều người gặp phải không? Tôi đã không thể tìm thấy nhiều lời khuyên cho vấn đề cụ thể này. Tôi do dự chỉ đơn giản là thay đổi lịch mặc định được sử dụng trong các nền văn hóa trên một ý thích, mà không có một số lời khuyên.

+3

Chúng là lịch tôn giáo, rất khó giải quyết vì chúng dựa trên quan sát mặt trăng. Một tháng có thể là 30 ngày thay vì 29 ngày nếu trời có mây. Các ngày trong tương lai sẽ thay đổi khi đang bay, lưu ý thuộc tính HijriAdjustment. Chỉ chuyển đổi ngày hiện tại. –

+0

Sẽ là một ý tưởng tồi khi chỉ cần ép buộc một lịch gregorian, sau đó? Hay điều đó không thể sử dụng được. – Ross

+2

Tôi nghĩ bạn cần nói chuyện với khách hàng của mình và tìm hiểu thêm về các hoạt động kinh doanh của họ. –

Trả lời

1

Để có kết quả tốt nhất với toàn cầu hóa nói chung, hãy tuân thủ nghiêm ngặt việc biểu diễn dữ liệu bất biến trong tất cả các lĩnh vực trong ứng dụng của bạn, ngoại trừ lớp trình bày (tương tác với con người); và thêm một lớp dịch nhất quán trong lớp trình bày cho mọi thứ cần được trình bày cho một người, hoặc được một con người trực tiếp nhập vào.

Về lịch cụ thể: nhiều ứng dụng toàn cầu tuân thủ nghiêm ngặt lịch Gregorian (mặc dù định dạng hiển thị của con người, tất nhiên, được bản địa hóa); một số hỗ trợ một vài lịch khác có trạng thái chính thức ở một số quốc gia, nhưng sau đó lại được thực hiện trên lớp trình bày với tác động tối thiểu lên ứng dụng và chỉ khi nó trở nên thực tế để giải quyết các thị trường đó hoặc thậm chí sau khi triển khai sản xuất khu vực đã bắt đầu.