c#中的CultureInfo类[通俗易懂]

c#中的CultureInfo类[通俗易懂]c#中的CultureInfo类2014年06月20日17:14:33DO_DAJIANGJUN阅读数:9912更多个人分类:C#/.NetFramework/.NetCore版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/XuWei_XuWei/article/details/32717259CultureInfo类位…

大家好,又见面了,我是你们的朋友全栈君。

c#中的CultureInfo类

2014年06月20日 17:14:33 DO_DAJIANGJUN 阅读数:9912更多

个人分类: C#/.Net Framework/.Net Core

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/XuWei_XuWei/article/details/32717259

CultureInfo类位于System.Globalization命名空间内,这个类和命名空间许多人都不是很熟悉,实际我们在写程序写都经常间接性的接触这个类,当进行数字,日期时间,字符串匹配时,都会进行CultureInfo的操作,也就是说,也就是不同的CultureInfo下,这些操作的结果可能会不一样,由于我们大部分开发部署都是在同一种语言环境中,平日里可能没有感觉到它的用处,如果你的开发的项目是给国外用户用的,有可能在你机器上运行输出是一种效果,在客户机器上是另一种输出效果,这句需要用到CultureInfo类了,对使用用户来说,这也是ms提供的人性化的一面(比方说,同样是日期,中文环境输出符合中国人的习惯,德语环境中的输出符合德国人的习惯,这是默认的输出方式),但对开发人员和服务数据中心来说,就要选择是保证统一的输出,还是用ms的默认方式了
code如下:
        static readonly string[] CultureSources = { “en-us”, “zh-cn”, “ar-iq”, “de-de” };
        static readonly Random Ran = new Random(Environment.TickCount);

        static void Main()
        {

            for (int i = 0; i < CultureSources.Length; i++){

                ThreadPool.QueueUserWorkItem(Client, i);
}
            Console.ReadLine();
        }

        static void Client(object obj)
        {

            int id = (int)obj;
            Thread.Sleep(Ran.Next(1000));
            CultureInfo culture = CultureInfo.GetCultureInfo(CultureSources[id]);            
            Thread.CurrentThread.CurrentCulture = culture;
            Console.WriteLine(“操作系统语言设置成{0}\n数据输出是:{1}\n”, culture.DisplayName, DateTime.Now.ToShortDateString());
        }
运行结果如下:
c#中的CultureInfo类[通俗易懂]

结果看到了吧,同样的DateTime.Now.ToShortDateString(),在英语-美国,中文-中国,阿拉伯语-伊拉克和德语-德国的不同环境下,日期输出格式竟然有如此不同的输出结果,这样对使用的用户来说是很友好的,单对编程人员来说,如果对这些数据要处理,就要考虑不同的语言环境中,该怎么处理了,同时,这些数据让数据中心服务器情何以堪啊……
原因分析:
.NET会考虑当前线程的CultureInfo,即Thread.CurrentThread.CurrentCulture(或者CultureInfo.CurrentCulture),并根据CultureInfo,进行相应地区文化的数据处理,要解决这个问题,这样设置
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;//和new CultureInfo(“”);一样,使用固定区域性,固定区域性不区分区域性;它与英语语言关联,但不与任何国家/地区关联
这样不管客户端运行在什么语言环境下,输出的时间格式都是统一的,方面数据中心服务器对数据做后续处理,结果如下图:
c#中的CultureInfo类[通俗易懂]

支持多种CultureInfo是整个.NET Framework更加人性化,因为这可以使同一个数据适应不同地区和文化,这样当然满足处于不同地区和文化的用户,但前提是数据给“人”看,如果这些数据用于计算机之间的传输,即给“机器”看,这样的多文化处理反而不妥,造成同一个数据的不同展现形式,尤其是读写两方的文化地区不同时,数据可能根本无法被正常读取或者产生潜在bug,因此这里,正是InvariantCulture的用武之地。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/150974.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 兴文石海旅游策划方案——石来运转天下览![通俗易懂]

    兴文石海旅游策划方案——石来运转天下览![通俗易懂]兴文石海旅游策划方案——石来运转天下览!熊大寻旅游策划公司/文熊大寻旅游策划公司为兴文石海天坑发现了震撼性奇观:石壁上一个天然的大大的“运”字,立即创意出“石来运转”的卖点,改变原来看一眼就走的局面,变成人人都要下到天坑里围着“运”字走一圈“转运”,这样一来三小时就花掉了,再到大运观音处烧柱香,三百元也花掉了!加上把天坑打造成”世界最大的天然聚宝盆”夜景工程,过夜经济就形成了!把原来看天坑抓眼…

  • 发短信接口获取验证码

    发短信接口获取验证码

    2021年11月15日
  • spring注解@Conditional 按照一定的条件进行判断,满足条件给容器中注册bean

    spring注解@Conditional 按照一定的条件进行判断,满足条件给容器中注册beanpublicclassPerson{ privateStringname; privateintage; publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicintgetAge(){…

    2022年10月25日
  • @RequestBody 和 @RequestParam可以同时使用

    @RequestBody 和 @RequestParam可以同时使用@RequestParam和@RequestBody这两个注解是可以同时使用的。网上有很多博客说@Requestparam和@RequestBody不能同时使用,这是错误的。根据HTTP协议,并没有说post请求不能带URL参数,经验证往一个带有参数的URL发送post请求也是可以成功的。自己个人实际验证结果:packagecom.example.model;import…

  • PyTorch学习笔记(6)——DataLoader源代码剖析

    PyTorch学习笔记(6)——DataLoader源代码剖析这两天把DataLoader的源代码的主要内容进行了一些分析,基于版本0.4.1。当然,因为内容比较多,没有全部展开,这里的主要内容是DataLoader关于数据加载以及分析PyTorch是如何通过Python本身的multiprocessing和Threading等库来保证batch是顺序取出的。额外的内容都会给出链接,在这里不会详细展开。0.前言(楔子)本篇关于DataLoad…

  • 正则化的作用以及L1和L2正则化的区别

    正则化的作用以及L1和L2正则化的区别0正则化的作用正则化的主要作用是防止过拟合,对模型添加正则化项可以限制模型的复杂度,使得模型在复杂度和性能达到平衡。常用的正则化方法有L1正则化和L2正则化。L1正则化和L2正则化可以看做是损失函数的惩罚项。所谓『惩罚』是指对损失函数中的某些参数做一些限制。L1正则化的模型建叫做Lasso回归,使用L2正则化的模型叫做Ridge回归(岭回归。但是使用正则化来防止过拟合的原理是什么?L1和L…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号