2012-12-14 62 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'的一部分,尽管它可能应该是这样。) –