我需要使用計劃在應用程序中使用24小時格式化日期時間執行一些計算。例如,17h + 12h = 5h。我試圖創建我自己的Time
結構,並繞過TimeSpan
或DateTime
。它工作正常,但我陷入了ToString
的格式化。C#中結構體的一天中的時間#
確實,我當然希望我的結構能夠在任何文化下工作。起初,我正在考慮將格式委託給DateTime
結構,並跳過所有不嚴格與時間相關的自定義格式。例如,我無法將此任務委託給TimeSpan
,因爲它不處理某些文化中使用的AM/PM。舉例來說,在我的Time
結構我寫道:
public string Format(string format, IFormatProvider provider)
{
return TimeFormat.Format(this, format, DateTimeFormatInfo.GetInstance(provider), provider);
}
// ...
internal class TimeFormat
{
internal string Format(Time time, string format, DateTimeFormatInfo dtfi, IFormatProvider provider)
{
DateTime dt = new DateTime(DateTime.MinValue, 1, 1, time.Hours, time.Minutes, time.Seconds, time.Milliseconds);
/* Here I am checking what the 'format' string is made of
and filter-out anything that is not strictly-time related. */
return dt.Format(format, provider);
}
}
我看了一下是怎麼DateTime
結構的ToString
方法落實到mscorlib程序。並waow ...考慮到這麼多的東西。我想或多或少地重寫它裏面的內容,但只保留與時間有關的內容,但所有內容都混雜在一起而不易理解。而且我注意到一些絕對不直接的東西也需要處理,比如希伯來格式等等。這會花費我更多的時間,而不是我期望重寫所有這些!尤其是我不想不明白我在做什麼。
所以總結起來:
- 我如何創建一個的一天中的時間格式「兼容所有的文化」?
- 上面一級,我正確使用
DateTime
或TimeSpan
的包裝處理問題?我不能直接使用TimeSpan
:它使用的是消極時間(我使用modulos的時間嚴格限制在0到23:59:59.999之間),它在某些文化中不處理AM/PM,它使用Day
s 。對我來說,'當天的時間'與'時間跨度的時間'不同。 - 我不需要處理時區或DST,也不需要閏秒,因爲我處於日曆不可知的環境中,但我希望能夠處理一天中的時間本地化格式。 (例如,使用'H'(或任何希伯來語,中文,泰米爾語或俄語字符)而不是':'或AM/PM來代替24小時格式)。
任何提示或幫助指向我的一些圖書館或教程將有所幫助!
在問這個問題之前,我看了一下this post,還看了一下this library,但是看起來我想實現的過於複雜。
我將深入瞭解您的圖書館 – Guillaume 2012-07-22 08:26:25
@Guillaume我一直在使用'NodaTime',並且幾乎沒有抓到它所做的事情,但存在像LocalTime和' LocalDate'使它非常值得。 – psubsee2003 2012-07-22 08:48:58