在ASP.NET应用程序中,我将文化设置为lv-LV。一切都很好,但默认的短日期格式似乎是“yyyy.mm.dd”。客户希望它是“dd.mm.yyyy”(实际上是LV标准)。 ASP.NET在哪里获取特定文化的日期/时间设置?如何在不影响其他文化的情况下针对单一文化进行更改(应用程序应该是可本地化的)?
答案 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“区域和语言选项”控制面板并自定义格式),框架将选择它。