ASP.NET从哪里获取其文化设置?

时间:2009-06-10 13:28:03

标签: asp.net datetime localization globalization

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

2 个答案:

答案 0 :(得分: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;

这样你就可以保留除日期格式之外的所有其他区域设置。

此代码实际上在我们的Page基类中的OnLoad上运行。我不太确定这是最好的方式。

答案 1 :(得分: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“区域和语言选项”控制面板并自定义格式),框架将选择它。