我正在尋找一種方法來正確顯示在C#和Delphi中大於24小時的本地化持續時間。我的意思是,DateTime類型通常提供了這樣的字符串函數,但時間跨度不是,爲什麼?什麼是24小時顯示時間跨度的標準方式?
而我甚至不知道什麼是非本地化時間跨度的正確格式。 例如持續2天10小時30分鐘。 我發現有些會顯示2.10:30:00或2:10:30:00或2 10:30:00的時間跨度。
請幫忙,謝謝。
我正在尋找一種方法來正確顯示在C#和Delphi中大於24小時的本地化持續時間。我的意思是,DateTime類型通常提供了這樣的字符串函數,但時間跨度不是,爲什麼?什麼是24小時顯示時間跨度的標準方式?
而我甚至不知道什麼是非本地化時間跨度的正確格式。 例如持續2天10小時30分鐘。 我發現有些會顯示2.10:30:00或2:10:30:00或2 10:30:00的時間跨度。
請幫忙,謝謝。
對於不變的文化(非本地化):
myDateTime.ToString(CultureInfo.InvariantCulture)
否則,只需使用myDateTime.ToShortDateString()或.ToLongDateString()..它會使用:在這種情況下
System.Threading.Thread.CurrentThread.CurrentUICulture
..
,或者如果你有具體的心事,你可以做
var myCulture = CultureInfo.GetCultureInfo("en-GB");
dt.ToString(myCulture);
編輯 對於時間跨度:
例子:
DateTime dt1 = new DateTime(2012, 7, 17, 12, 30, 0);
DateTime dt2 = new DateTime(2012, 7, 18, 14, 40, 0);
TimeSpan ts = dt2 - dt1;
string s = ts.ToString("G", CultureInfo.InvariantCulture);
更多的例子在這裏:http://msdn.microsoft.com/en-us/library/dd784379.aspx
EDIT 2:時間跨度格式字符串
你可以請按照ISO 8601,PDF的規格可以找到here。見4.4.3 Duration
但是,使用本文檔中一字排開了會議看起來相當複雜,我,因爲根據該規範,您需要包括有關時的時間間隔發生背景:
的日曆年,日曆月,日曆星期或 日曆日取決於其在日曆中的位置。因此,只有在日曆年,日曆月,日曆周或所用日曆日期的持續時間已知時,才能評估標稱持續時間的確切持續時間。
如果在該時間段發生的實際時刻是不相關的申請,那麼也許這將是不夠好,忘記的年份和月份部分,只是堅持與格式nnDTnnHnnMnnS
。使用標準TimeSpan
方法不應太難。
更新: 閱讀遠一點,這個標準似乎並不適用於您的問題畢竟:
的持續時間是間隔 和循環時間間隔的表示作爲一個組成部分,代表持續時間因此是 沒有這個國際標準促進。
我只想離開這裏的答案,以避免任何人走進這個死衚衕像我一樣,或者,如果你認爲「排序按照一個標準的」足夠好...
哦,我對不起..我只是意識到你想爲TimeSpan ..不是DateTime ..給我一個莫;-) – Matt 2012-07-18 03:46:36