我有一個客戶想要看到前一天結束時表示的午夜。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中(沒有一個醜陋的字符串操作黑客)?
我有一個客戶想要看到前一天結束時表示的午夜。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中(沒有一個醜陋的字符串操作黑客)?
我想你會需要一個自定義的格式化日期。看看IFormatProvider
和ICustomFormatter
接口。
,你可以設置一個擴展方法,但正確的做法很可能是使用的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());
編輯:每評論更新。
有60,000毫秒在分鐘,這一次只能用其中的一個(DateTime.Today代表0:00.000 AM)的作品 –
@DrJokepu:我不知道我跟隨。你能否詳細說明一下?如果輸入是由OP給出的午夜,則比較應該沒問題。如果包含毫秒,例如'0:00:30',則上述內容將返回當前日期,除非它用於檢查「Hour」和「Minute」屬性。 –
加1爲例。我認爲你對盧塞羅的建議是正確的。 –
謝謝你,Lucero。我認爲這些接口可能是有用的。 (+1)如果這個工作,我會發佈一個例子。 –
自定義格式化程序使用string.Format(),但ICustomFormatter.Format()在使用date.ToString(新的MyFormatter())時永遠不會被調用; –