2010-09-02 61 views
5

Tôi có một yêu cầu kinh doanh kỳ lạ để xuất các ngày từ 01:00 đến 24:00, thay vì thông thường từ 00:00 đến 23:00. Nó thực sự là một yêu cầu điên rồ, nhưng tiếc là tôi không nghĩ rằng tôi có thể tránh nó.Làm cách nào để biểu diễn định dạng 24 giờ của DateTime .NET trong 01-24 thay vì 00-23?

Đây sẽ là tùy chọn cấu hình trong phần mềm của chúng tôi, vì vậy tôi vẫn sẽ cần hỗ trợ bình thường 00-23, vì vậy tôi hy vọng tôi có thể thực hiện điều này bằng các chuỗi định dạng. Nhưng tôi cũng đang xem xét sử dụng một regex để sau quá trình chuỗi kết quả nếu điều đó làm cho nó dễ dàng hơn.

Cảm ơn!

+1

Vì vậy, nói cách khác, bạn cần hiển thị 24: XX thay vì 00: XX và không có gì khác thay đổi, phải không? – zneak

+0

Nó cần phải hiển thị 24: XX nhưng xoắn là nó cũng cần phải được hiển thị từ ngày trước đó. Ví dụ. 9/7/2010 00:00 sẽ được hiển thị là 9/6/2010 24:00. – randbrown

Trả lời

2

này nghe có vẻ giống như một ứng cử viên tốt cho một lớp wrapper được sử dụng để định dạng DateTime theo quy tắc kinh doanh:

public class BusinessDateTimeFormatter 
{ 
    public BusinessDateTimeFormatter(DateTime dateTime) 
    { 
     _dateTime = dateTime; 
    } 

    public override string ToString() 
    { 
     return String.Format("{0} {1}:{2}", _dateTime.Date, _dateTime.Hour + 1, _dateTime.Minute); 
    } 
} 

Ngoài ra, và thậm chí có thể chính xác hơn, bạn có thể tạo một loại đại diện cho ý tưởng của doanh nghiệp về một DateTime. Trong thiết kế hướng đối tượng, việc thay thế các kiểu nguyên thủy này bằng các kiểu tùy chỉnh xảy ra thường xuyên, vì miền được mô hình hóa có các hạn chế đặc biệt giống như giới hạn này mà bạn mô tả.

+0

Trình định dạng khách hàng cho một ngày có vẻ giống như con đường đi cho tôi. Bạn đang đóng gói nó và từ tên của nó rõ ràng lý do tại sao nó được thực hiện – JonWillis

+0

Tôi đã kết thúc làm một cái gì đó dọc theo dòng đề nghị này - một lớp kinh doanh đơn giản để xử lý các định dạng. Tôi đã chọn cách tiếp cận này bởi vì nó hiện chỉ được yêu cầu trong một lĩnh vực ứng dụng của tôi vì vậy đây là giải pháp đơn giản nhất hiện nay. Nếu nó trở thành bắt buộc trong các khu vực tính năng khác của ứng dụng, tôi có thể xem xét việc triển khai trình định dạng tùy chỉnh mạnh mẽ hơn hoặc một cái gì đó tương tự. – randbrown

3

Mở rộng NET bằng cách tạo cung cấp định dạng của riêng bạn: http://msdn.microsoft.com/en-us/library/0asazeez(VS.71).aspx

+0

Tôi không nghĩ đây là một ý tưởng đặc biệt tốt. Trách nhiệm của IFormatProvider là định dạng dựa trên văn hóa chứ không phải là quy tắc kinh doanh. Trong khi nó sẽ làm việc, nó là cong vênh trách nhiệm của giao diện đó và quá tải tương ứng. Vì đây là một mối quan tâm kinh doanh, nên logic trong mô hình. – codekaizen

+1

@code - Tôi không đồng ý. Ông về cơ bản là tạo ra một nền văn hóa tùy chỉnh, không xác định logic kinh doanh (ông đang sử dụng hành vi 'DateTime' chuẩn, chỉ hiển thị giá trị khác nhau cho người dùng). Đây chính xác là những gì 'IFormatProvider' là cho. –

+0

@Jon B - Làm thế nào là logic kinh doanh tùy chỉnh một nền văn hóa? Ông đặc biệt nói rằng đây là một yêu cầu kinh doanh. – codekaizen

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