2010-09-02 69 views
5

我有一個奇怪的業務需求輸出日期爲01:00至24:00,而不是通常的00:00至23:00。這真是一個瘋狂的要求,但不幸的是我不認爲我可以避免它。如何在01-24而不是00-23中表示.NET DateTime 24小時格式?

這將是我們軟件中的一個配置選項,所以我仍然需要支持普通的00-23,所以我希望我可以用格式化字符串以某種方式做到這一點。但是我也在考慮使用正則表達式來後處理結果字符串,如果這樣做更容易的話。

謝謝!

+1

換句話說,你需要顯示24:XX而不是00:XX,沒有別的改變,是嗎? – zneak 2010-09-02 20:27:37

+0

它需要顯示24:XX,但扭曲是它也需要顯示從以前的日期。例如。 9/7/2010 00:00應顯示爲9/6/2010 24:00。 – randbrown 2010-09-09 13:39:35

回答

2

這聽起來像一個很好的候選人的包裝類用於根據業務規則設置格式的日期時間:

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

另外,甚至更準確地說,您可以創建一個代表業務構想DateTime的類型。在面向對象的設計中,用自定義類型替換原始類型會經常發生,因爲要建模的域具有特殊的限制,就像你描述的那樣。

+0

某個日期的客戶格式化程序聽起來像是我要走的路。你正在封裝它,並從名稱清楚它爲什麼已完成 – JonWillis 2010-09-02 20:40:31

+0

我最終做了一些沿着這個建議 - 一個簡單的業務類來處理格式。我選擇了這種方法,因爲它目前只在我的應用程序的一個區域中需要,因此它現在是最簡單的解決方案。如果它在應用程序的其他功能區域中被需要,我可能會考慮實現更強大的自定義格式化程序或類似的東西。 – randbrown 2010-09-09 13:44:13

3

通過創建自己的格式提供擴展.NET:http://msdn.microsoft.com/en-us/library/0asazeez(VS.71).aspx

+0

我不認爲這是一個特別好的主意。 IFormatProvider的責任是根據文化進行格式化,而不是業務規則。雖然它會起作用,但它正在扭曲該接口的責任和相應的過載。由於這是一個商業問題,所以邏輯應該放在模型中。 – codekaizen 2010-09-02 20:35:23

+1

@code - 我不同意。他基本上是在創建一種自定義文化,而不是定義業務邏輯(他使用標準的「DateTime」行爲,只是向用戶顯示不同的值)。這正是'IFormatProvider'的用途。 – 2010-09-02 20:39:27

+0

@Jon B - 定製業務邏輯如何成爲一種文化?他特別指出這是一項業務要求。 – codekaizen 2010-09-02 20:40:18

相關問題