加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 如何更改当前文化的数据格式,以便它适用于整个Web应

发布时间:2020-12-16 07:31:57 所属栏目:asp.Net 来源:网络整理
导读:我想为我的整个Web应用程序设置日期格式为’YYYY-MM-DD’.我可以通过创建CultureAndRegionInfoBuilder的对象然后注册它来完成此操作.但由于我的应用程序是在托管环境中,我无法运行可执行文件来注册文化. 我需要一种方法在Application_Start中执行此操作,以便
我想为我的整个Web应用程序设置日期格式为’YYYY-MM-DD’.我可以通过创建CultureAndRegionInfoBuilder的对象然后注册它来完成此操作.但由于我的应用程序是在托管环境中,我无法运行可执行文件来注册文化.

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

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

简而言之,我需要一种方法来从Web应用程序本身以编程方式更改整个Web应用程序的当前文化设置.

编辑:我尝试了以下@doitgood的建议,但得到异常System.InvalidOperationException:实例是只读的,而intellisense显示属性为Get或Set.

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";

我得到了相同的异常’Instance是只读的’.

解决方法

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;

}

将每个页面初始化的每个请求换成当前Thread的文化是最好的主意吗?我没有足够的数据来衡量它,但似乎工作正常:).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读