C# CultureInfo中常用的InvariantCulture

C# CultureInfo中常用的InvariantCulture本文参考自CultureInfo中重要的InvariantCulture,纯属读书笔记,加深记忆1、CultureInfo的InvariantCulture的作用(1)、CultureInfo使整个.NETFramework更加人性化,因为这可以使同一个数据适应不同地区和文化,这样当然满足处于不同地区和文化的用户。但前提是数据给“人”看,如果这些数据用于计算机之间的传输,即给“…

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

本文参考自CultureInfo中重要的InvariantCulture,纯属读书笔记,加深记忆

1、CultureInfo的InvariantCulture的作用

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

(2)、当进行数字,日期时间,字符串匹配时,都会进行CultureInfo的操作,也就是不同的CultureInfo下,这些操作的结果可能会不一样。这里要介绍一下非常容易被忽视InvariantCulture。

 

2、使用场景

你编写一个程序,要向数据中心服务器传递一些时间数据,你会怎么写?直接DateTime.ToString()?那你就大错特错了,下面用代码,举个非常形象的例子。在一个控制台里,模拟数据中心,然后放出多个线程,模拟客户端程序传递数据。

        static readonly string[] CultureSources = { "en-us", "zh-cn", "ar-iq", "de-de" };
        static readonly Random Ran = new Random(Environment.TickCount);
        static void Main()
        {
            Console.WriteLine("数据中心开始接受客户端数据:");
            for (int i = 0; i < CultureSources.Length; i++)
                ThreadPool.QueueUserWorkItem(Client, i);
            Console.ReadKey(true);

            Console.WriteLine("");
            Console.WriteLine("数据中心:…………");
        }

        static void Client(object obj)
        {
            int id = (int)obj;
            Thread.Sleep(Ran.Next(1000));

            CultureInfo cul = CultureInfo.GetCultureInfo(CultureSources[id]);
            Thread.CurrentThread.CurrentCulture = cul;
            Console.WriteLine("某客户端操作系统语言设置{0}\n传送数据:{1}\n", cul.DisplayName, new DateTime(1990, 10, 27).ToShortDateString());
        }

C# CultureInfo中常用的InvariantCulture

同样的DateTime.ToShortDateString(),在英语-美国,中文-中国,阿拉伯语-伊拉克和德语-德国的不同环境下,1990年10月27日竟然有如此不同的输出结果,这些数据让数据中心服务器情何以堪啊!!!

造成这个情况的原因是:在进行日期时间输出时,.NET会考虑当前线程的CultureInfo,即Thread.CurrentThread.CurrentCulture(或者CultureInfo.CurrentCulture),并根据CultureInfo,进行相应地区文化的数据处理。注意不要和UICulture混淆。

解决方案就是使用这个特殊的InvariantCulture.解决代码如下:

Console.WriteLine("某客户端操作系统语言设置{0}\n传送数据:{1}\n", cul.DisplayName, new DateTime(1990, 10, 27).ToString(CultureInfo.InvariantCulture.DateTimeFormat.ShortDatePattern, CultureInfo.InvariantCulture));

C# CultureInfo中常用的InvariantCulture

ok,这样不管客户端运行在什么语言环境下,输出的时间格式都是统一的,方面数据中心服务器对数据做后续处理。这样所有的输出结果都保持一致了。

 

转载于:https://www.cnblogs.com/GreenLeaves/p/6757917.html

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/151001.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • XSS(跨站脚本攻击)相关内容总结整理

    XSS的攻击相关资料整理文章目录XSS的攻击相关资料整理跨站脚本攻击(XSS)XSS 简介XSS 危害XSS 原理XSS 分类XSS 防御总结XSS 问答参考资料跨站脚本攻击(XSS)XSS 简介人们经常将跨站脚本攻击(Cross Site Scripting)缩写为CSS,但这会与层叠样式表(Cascading Style Sheets,CSS)的缩写混淆。因此,有人将跨站脚本攻击缩写为XSS。跨站脚本攻击(XSS),是最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户

    2022年3月1日
    50
  • 谷歌地球怎么画路线图_消防路线图怎么画

    谷歌地球怎么画路线图_消防路线图怎么画1.首先需要将GPSDebug.log打开。打开方法 :点我传送。 2.使用NMEA2KMZ程序将LOG中的Nmealog开头的log转换成KMZ文件,会生成一个日期的文件。3.直接将生成的文件放到GoogleEarth中就行了。当两条路线对比的时候,还可以调整路线的颜色。注: KMZ文件是将GPS每秒位置点连成轨迹,比较精确的反映了测试轨迹。

    2022年9月19日
    3
  • vue.js和react.js_vue和jquery

    vue.js和react.js_vue和jqueryjquery和框架的区别框架:数据和视图分离,以数据驱动视图,只关心数据变化,dom操作被封装。数据驱动jquery:依靠dom操作去组合业务逻辑。事件驱动React和Vue对比两者本质区别Vue—本质是MVVM框架,由MVC发展而来React—本质是前端组件化框架,由后端组件化发展而来模板的区别Vue—使用模板(最初由Angular提出)React—使用JSX模板语法…

    2022年9月25日
    3
  • sql2000数据库置疑造成的原因以及如何解决置疑「建议收藏」

    sql2000数据库置疑造成的原因以及如何解决置疑「建议收藏」sql2000数据库置疑造成的原因以及如何解决置疑

    2022年8月21日
    4
  • LASSO回归与L1正则化 西瓜书「建议收藏」

    1.结构风险与经验风险在支持向量机部分,我们接触到松弛变量,正则化因子以及最优化函数,在朴素贝叶斯分类,决策树我们也遇到类似的函数优化问题。其实这就是结构风险和经验风险两种模型选择策略,经验风险负责最小化误差,使得模型尽可能的拟合数据,而结构风险则负责规则化参数,使得参数的形式尽量简洁,从而达到防止过拟合的作用.所以针对常见模型,我们都有下式:                           …

    2022年4月11日
    78
  • 我的Linux内核学习之路

    我的Linux内核学习之路现在回首看看,接触Linux已经很长时间了。在大三的时候开始学习Java,但是一直学Java的话,感觉有点腻,就尝试找点其他东西来学习。所以当时就选择学习了Linux。至于为什么要学习Linux,有以下三个原因。 一是我比较喜欢开源的东西,当时学习Java就是因为它开源,以后选择学习Android很大一部分原因也是因为它开源。现在已经工作了大半年,每当有搞不懂的问

    2022年7月23日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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