2011-10-22 99 views
1

我有一个asp.net mvc应用程序。它是多语言的,并在cookie中写入一些值。如果应用程序的currentCulture(语言)和存储在Cookie中的DateTime的值具有不同的格式,则会出现问题。因此,我决定只在英文文化中存储和检索DateTime值。但我遇到了麻烦。在切换文化之间保存DateTime.Now

var currentCulture = Thread.CurrentThread.CurrentCulture; //for example, ru-RU 
var currentUICulture = Thread.CurrentThread.CurrentUICulture; 

var englishCulture = CultureInfo.GetCultureInfo("en-US"); 
Thread.CurrentThread.CurrentCulture = englishCulture; 
Thread.CurrentThread.CurrentUICulture = englishCulture; 

var dateTime = DateTime.Now; // 10/22/2011 9:56:15 AM (in English) 


Thread.CurrentThread.CurrentCulture = currentCulture; 
Thread.CurrentThread.CurrentUICulture = currentUICulture; 

return dateTime;    // 22.10.2011 9:56:15 (in Russian). But why? 

我想返回英文文化中的DateTime.Now。

回答

2

DateTime不存储文化信息。这是当你拨打ToString时,文化很重要。如果你想在返回之前用特定的文化格式化它,你需要将它作为一个字符串返回。

return DateTime.Now.ToString(cultureInfo); 

也许尽管你应该回到它作为一个DateTime(你可能想使用DateTime.UtcNow以便它可以跨时区),并使用固定区域性格式化:CultureInfo.InvariantCulture

+0

为什么本地变量“dateTime”的值已更改? – Alexandre

+1

呃..什么?它*没有改变 - 它只是格式不同。你的意思是“为什么日期的字符串表示会改变?”这是因为当你的调试器调用ToString时,该方法使用当前的文化,并且你改变了它。 –

+0

如果当前的文化不是en-US,是否可以在en-US文化中返回DateTime结构体(不是字符串)? – Alexandre