2010-01-27 133 views
7

我有一個客戶想要看到前一天結束時表示的午夜。DateTime一天結束24:00(午夜)

var date = DateTime.Parse("1/27/2010 0:00"); 
Console.WriteLine(date.ToString(<some format>)); 

顯示:

1/26/2010 24:00 

我相信這是在ISO 8601標準有效。 (see this

有什麼辦法來支持這種在.net中(沒有一個醜陋的字符串操作黑客)?

回答

7

我想你會需要一個自定義的格式化日期。看看IFormatProviderICustomFormatter接口。

Thisthis也可能有幫助。

+0

謝謝你,Lucero。我認爲這些接口可能是有用的。 (+1)如果這個工作,我會發佈一個例子。 –

+0

自定義格式化程序使用string.Format(),但ICustomFormatter.Format()在使用date.ToString(新的MyFormatter())時永遠不會被調用; –

2

,你可以設置一個擴展方法,但正確的做法很可能是使用的IFormatProvider爲Lucero suggested。該擴展方法將與日期的Date property進行比較,該日期返回時間分量設置爲午夜的日期。這將是與此類似:

public static class Extensions 
{ 
    public static string ToCustomFormat(this DateTime date) 
    { 
     if (date.TimeOfDay < TimeSpan.FromMinutes(1)) 
     { 
      return date.AddDays(-1).ToString("MM/dd/yyyy") + " 24:00"; 
     } 
     return date.ToString("MM/dd/yyyy H:mm"); 
    } 
} 

使用然後調用它:

var date = DateTime.Parse("1/27/2010 0:00"); 
Console.WriteLine(date.ToCustomFormat()); 

編輯:每評論更新。

+2

有60,000毫秒在分鐘,這一次只能用其中的一個(DateTime.Today代表0:00.000 AM)的作品 –

+0

@DrJokepu:我不知道我跟隨。你能否詳細說明一下?如果輸入是由OP給出的午夜,則比較應該沒問題。如果包含毫秒,例如'0:00:30',則上述內容將返回當前日期,除非它用於檢查「Hour」和「Minute」屬性。 –

+0

加1爲例。我認爲你對盧塞羅的建議是正確的。 –