在 ASP.NET 应用程序中,我将区域性设置为 lv-LV。一切都很好,但默认的短日期格式似乎是“yyyy.mm.dd”。客户希望它是“dd.mm.yyyy”(这实际上是 LV 标准)。ASP.NET 从哪里获得特定文化的日期/时间设置?如何在不影响其他文化的情况下为单一文化更改它们(应用程序应该是可本地化的)?
问问题
3858 次
2 回答
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 上运行的。我不太确定这是最好的方法。
于 2009-06-10T13:42:58.663 回答
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 区域和语言选项控制面板并自定义格式)并且框架将选择它。
于 2009-06-10T17:02:27.107 回答