2012-12-14 61 views
0

我使用DateTime.UtcNow.ToLongTimeString()來獲取當前時間字符串。DateTime.ToLongTimeString()生成不同的字符串

但它表現奇怪,有時它返回時間如3:10:00有時像03:10:00(前導零)。爲什麼會發生?

我設置應用程序啓動

Thread.CurrentThread.CurrentCulture = new CultureInfo(...); 
Thread.CurrentThread.CurrentUICulture = new CultureInfo(...); 

文化,併爲時間字符串不同的結果來自於一個任務(從我現在看到)。所以我創建了一個任務,並且爲它完成了.Wait()。在任務內部,時間被轉換爲不同的字符串。

UPDATE

對於那些誰有興趣,這裏是一些有用的閱讀中,我發現:

Is there a way of setting culture for a whole application? All current threads and new threads?
http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.defaultthreadcurrentculture.aspx

+0

那麼你是否隨時隨地更改「文化」? – V4Vendetta

+0

這是改變UI線程文化的危險。工作者線程毀了你的一天。是的,.NET 4.5有一個修復它。 –

回答

1

然而它的行爲怪異,有時它返回時像3 :10:00,有時像03:10:00(前導零)。

你有沒有說過任何關於哪裏這種情況發生 - 但如果你使用不同的文化也可能發生一定的。通常情況下,如果沒有領先的零,我希望能看到am/pm代號。

如果要獲得一致的結果,請始終指定相同的區域性(例如CultureInfo.InvariantCulture)。

當然,如果這一切都在同一個系統上而不改變文化設置,那是另外一回事。

+0

當我從任務中調用'.ToLongTimeString()',即從主線程返回「03」並從任務返回「3」時,會發生這種情況。對於主線程,我在應用程序啓動時指定了一種文化。似乎我需要將主線程的文化傳遞給任務。我認爲它會自動選擇文化。 –

+1

@net_prog:不,我不相信文化傳播。 (我曾預料它也是如此,但我最近才知道它*不是'ExecutionContext'的一部分,儘管它可能應該是這樣。) –