gpt4 book ai didi

asp.net - 如何更改当前区域性的数据格式,使其适用于整个 Web 应用程序

转载 作者:行者123 更新时间:2023-12-01 19:55:32 25 4
gpt4 key购买 nike

我想将整个网络应用程序的日期格式设置为“YYYY-MM-DD”。我可以通过创建 CultureAndRegionInfoBuilder 对象然后注册它来做到这一点。但由于我的应用程序位于托管环境上,因此我无法运行可执行文件来注册区域性。

我需要一种方法在 Application_Start 中执行此操作,以便它适用于整个网络应用程序。

我尝试使用Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern更改日期格式,但它似乎没有将更改传播到整个应用程序。

简而言之,我需要一种方法来通过 Web 应用程序本身以编程方式更改整个 Web 应用程序的当前区域性设置。

编辑:我根据@doitgood的建议尝试了以下操作,但得到了异常System.InvalidOperationException:实例是只读的。,而智能感知将属性显示为获取或设置。

void Application_BeginRequest(object sender, EventArgs e)
{
Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd";
}

为了对应用程序进行全局更改,我在 Application_Start 中尝试了以下操作:

System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd";

我得到同样的异常“实例是只读的”。

最佳答案

Sebeto 的回答是正确的。我有同样的问题,我刚刚尝试过。我想我应该添加一些更多的解释。一旦设置了当前区域性,当前区域性的属性实际上是只读的。因此,您必须构造一个新的 CultureInfo 对象(最简单的方法是克隆现有区域性)。然后,您可以在将当前线程区域性对象与您自己的区域性对象交换之前调整区域性信息对象的属性。

CultureInfo newCultureDefinition = (CultureInfo)Thread.CurrentThread.CurrentCulture.Clone();
//make percentages n% instead of n % .ToString("p") adds a space by default english culture in asp.net
newCultureDefinition.NumberFormat.PercentPositivePattern = 1;
newCultureDefinition.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd";
Thread.CurrentThread.CurrentCulture = newCultureDefinition;

还有一个问题是,在哪里放置代码来更改当前线程的区域性。

根据微软的例子,参见http://support.microsoft.com/kb/306162您甚至可以更改 Page_Load 上的当前区域性。由于您的代码可能需要在 Page_Load 之前进行格式化,因此我已将更改放入我的基页 OnInit 中。

protected override void OnInit(EventArgs e)
{
initGlobalCulturalFormattingChanges();
}

最后:

private void initGlobalCulturalFormattingChanges()
{

CultureInfo newCultureDefinition = (CultureInfo)Thread.CurrentThread.CurrentCulture.Clone();
//make percentages n% instead of n % (.ToString("p0") adds a space by default in asp.net
newCultureDefinition.NumberFormat.PercentPositivePattern = 1;
newCultureDefinition.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd";
Thread.CurrentThread.CurrentCulture = newCultureDefinition;

}

用每个页面初始化的每个请求交换当前线程的区域性是最好的想法吗?我没有足够的数据来衡量这一点,但它似乎工作正常:)。

关于asp.net - 如何更改当前区域性的数据格式,使其适用于整个 Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7413077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com