2009-06-10 78 views
0

在ASP.NET应用程序中,我将文化设置为lv-LV。一切都很好,但默认的短日期格式似乎是“yyyy.mm.dd”。客户希望它是“dd.mm.yyyy”(这实际上是LV标准)。 ASP.NET如何获取特定文化的日期/时间设置?他们如何改变单一文化,而不影响其他文化(应用程序应该是本地化的)?ASP.NET从哪里获取其文化设置?

回答

3

我曾经有一个类似的问题,并解决它:

DateTimeFormatInfo dtfi = (DateTimeFormatInfo)Thread.CurrentThread.CurrentCulture.DateTimeFormat.Clone(); 
dtfi.ShortDatePattern = "dd.MM.yyyy"; 
dtfi.DateSeparator = "."; 
Thread.CurrentThread.CurrentCulture.DateTimeFormat = dtfi ; 
Thread.CurrentThread.CurrentUICulture.DateTimeFormat = dtfi; 

这样,你得到保持所有其他区域设置不同的日期格式。

该代码实际上在我们的页面基类中的OnLoad上运行。我不太确定这是最好的方法。

+0

这样的事情也在我脑海中浮现。不过这似乎有点......错了。 :D我不喜欢硬编码。也许有一些系统注册表键需要改变该文化或什么的? – 2009-06-10 14:17:56

0

.Net从DateTimeFormatInfo类中获取特定文化的日期/时间设置。您可以使用您修改的DateTimeFormatInfo来设置CultureInfo的DateTimeFormat属性。如果这种文化是当前的文化,那么你可以在CurrentCulture上设置它。无论哪种方式,这只会影响您创建的CultureInfo,并且不会影响任何其他文化。 (任何对CultureInfo.GetCultureInfo(“lv-LV”)的调用都不会选择这些更改,因为这是一个只读副本。)您不一定必须将CultureInfo传递给任何DateTime格式化方法(ToString,ParseExact ) - 您可以传递显式模式或DateTimeFormatInfo。

CultureInfo lvLV = new CultureInfo("lv-LV"); 

DateTimeFormatInfo lvLVdtfi = (DateTimeFormatInfo) lvLV.DateTimeFormat.Clone(); 
lvLVdtfi.ShortDatePattern = "dd.MM.yyyy"; 
lvLV.DateTimeFormat = lvLVdtfi; 

DateTime.Now.ToString("d", lvLV);  // short date pattern from modified lv-LV CultureInfo 
DateTime.Now.ToString("d", lvLVdtfi); // short date pattern from modified DateTimeFormatInfo 
DateTime.Now.ToString("dd.MM.yyyy"); // explicit short date pattern 

如果LV-LV是当前的Windows文化,那么你可以设置一个用户覆盖(使用intl.cpl区域和语言选项控制面板和自定义格式)和框架会挑这件事。

相关问题